TL;DR. Один foo.GetAsync().Result внутри middleware превращает ASP.NET Core, державший 50k RPS на p99 = 40 мс, в сервис на 12k RPS с p99 = 4 с при CPU 8 %. Виноват не блокирующий вызов сам по себе. Виноват hill-climbing: фидбэк-луп в ThreadPool, внутри которого живёт дискретное преобразование Фурье. Разбираемся по исходникам CoreCLR, как это работает, воспроизводим эффект на ~80 строках кода и показываем, почему SetMinThreads это не лечение, а анестезия.
Рубрика «threadpool»
Одна строчка .Result роняет ваш ASP.NET Core при CPU 8 %: разбор hill-climbing в .NET 9
2026-05-28 в 16:20, admin, рубрики: bulkhead, configureawait, hill-climbing, setminthreads, starvation, task.result, threadpoolСтатические DAG-графы: почему TBB иногда избыточен и как сделать планировщик с гарантированным временем выполнения
2025-08-19 в 11:35, admin, рубрики: c++, concurrency, threadpoolПроблема: Современные планировщики вроде TBB оптимизированы для динамических workload'ов, но в реальности до 40% случаев (игровые движки, оффлайн-рендеринг) используют фиксированные DAG-графы, где важнее предсказуемость, чем гибкость.
В большинстве случаев, когда разработчику нужен параллелизм, он использует либо std::async, либо полноценный thread-пул (например, oneTBB). Эти инструменты отлично подходят для динамически растущих множеств задач, где граф неизвестен заранее и задачи могут порождать друг друга в ходе выполнения.
Но в реальных проектах довольно часто встречается совершенно другой сценарий:
C# Как работает async-await? Асинхронное программирование
2025-04-23 в 10:15, admin, рубрики: .net, async, asynchronous, AsyncStateMachine, await, C#, task, threadpool, valuetask, асинхронность0. Кто такая асинхронность?
Асинхронность — это способ не блокировать поток, пока ты ждешь завершения операции. Она позволяет программе продолжать работать, даже если одна из операций (например, запрос к серверу) занимает время.
Какие преимущества дает?
Не давайте имена потокам из ThreadPool при отладке в VS
2020-03-29 в 20:52, admin, рубрики: c++, debug, multithreading, threadpool, vs, отладка, разработка под windowsВ некотором 2017 году, во время отладки в VS, производительность в проекте падала на ~80%, превращая игру в сборник различных ассинхронных кадров. Виновником торжества стала функция SetThreadName внутри пула. Читать полностью »
Асинхронный рассинхрон: антипаттерны в работе с async-await в .NET
2019-01-10 в 16:41, admin, рубрики: .net, ASP.NET, asp.net core, async/await, C#, threadpool, асинхронное программирование, потоки, ПрограммированиеКто из нас не косячит? Я регулярно встречаюсь с ошибками в асинхронном коде и делаю их сам. Чтобы прекратить это колесо Сансары делюсь с вами самыми типичными косяками из тех, которые иногда довольно сложно отловить и починить.

OutOfMemoryError: поймай, если сможешь
2018-07-21 в 8:18, admin, рубрики: java, OutOfMemoryError, threadpool
Всем привет! Сегдня хотел бы поделиться опытом обратоки ошибки ООМ. Эту статью меня побудила написать проблема, с которой я столкнулся. И которая, как позже выяснилось, долгое время оставалсь незамеченой. Меня заинтересовал этот вопрос, так что я решил изучить его немного глубже.
Руководство по фоновой работе в Android. Часть 3: Executors и EventBus
2018-03-14 в 10:32, admin, рубрики: android, async, Events, threadpool, Блог компании EPAM, Блог компании JUG.ru Group, Разработка под android
Приветствую, коллеги. Рад видеть вас снова в третьей части «Руководства по фоновой работе в Android». Если не видели предыдущие части, вот они:
В прошлый раз мы разобрались, как работают Loaders, а сразу после этого Google взял и сообщил, что они полностью переписали LoaderManager. Видимо, мне надо позже вернуться к этой теме, но пока что буду следовать плану и делиться подробностями того, как организовать фоновую работу в Android исключительно с помощью джавовых thread pool executors, а также как EventBus может помочь в этом, и как всё это работает под капотом. Читать полностью »
Как это работает в мире java. Пул потоков
2017-04-11 в 18:48, admin, рубрики: java, threadpool, threadsОсновной принцип программирования гласит: не изобретать велосипед. Но иногда, чтобы понять, что происходит и как использовать инструмент неправильно, нам нужно это сделать. Сегодня изобретаем паттерн многопоточного выполнения задач.
Представим, что у вас которая вызывает большую загрузку процессора:
public class Counter {
public Double count(double a) {
for (int i = 0; i < 1000000; i++) {
a = a + Math.tan(a);
}
return a;
}
}
Мы хотим как можно быстрее обработать ряд таких задач, попробуем*:
