Одной из основных целей написания кода в модели асинхронного программирования (более конкретно - использование обратных вызовов вместо блокирования потока) является минимизация количества блокирующих потоков в системе.
Для запущенных потоков,Эта цель очевидна из-за переключения контекста и затрат на синхронизацию.
Но как быть с заблокированными потоками?почему так важно уменьшить их количество?
Например, при ожидании ответа от веб-сервера поток блокируется и не занимает процессорное время и не участвует в переключении контекста..
Итак, мой вопрос: кроме ОЗУ (около 1 МБ на поток?) Какие другие ресурсы используются для блокировки заблокированных потоков?
И еще один более субъективный вопрос: в каких случаях это будет стоитьдействительно оправдывает необходимость написания асинхронного кода (цена может быть, например, разделением вашего приятного связного метода на множество методов beginXXX и EndXXX и переносом параметров и локальных переменных в поля класса).
UPDATE -дополнительные причины, которые я не упомянул или не дал достаточного веса:
Больше потоков означает больше блокировки общих ресурсов
Больше потоковозначает больше создания и утилизации потоков, что дорого
Система может определенно исчерпать потоки / ОЗУ, а затемоперации по обслуживанию клиентов (в сценарии с веб-сервером это может привести к отключению службы)