Какие ресурсы занимают заблокированные потоки

Одна из основных целей написания кода в модели асинхронного программирования (точнее - с использованием обратных вызовов вместо блокировки потока) - минимизировать количество блокирующих потоков в системе.Для запущенных потоков эта цель очевидна из-за переключения контекста и затрат на синхронизацию.Но как насчет заблокированных потоков?почему так важно сократить их количество?Например, при ожидании ответа от веб-сервера поток блокируется, не занимает процессорного времени и не участвует ни в каком переключении контекста.Итак, мой вопрос: кроме ОЗУ (около 1 МБ на поток?) Какие еще ресурсы занимают заблокированные потоки?И еще один более субъективный вопрос: в каких случаях эта стоимость действительно оправдает хлопоты по написанию асинхронного кода (цена может заключаться, например, в разделении вашего красивого согласованного метода на множество методов beginXXX и EndXXX, а также перемещении параметров и локальных переменных вполя класса).ОБНОВЛЕНИЕ - дополнительные причины, по которым я не упомянул или не уделил достаточно внимания:Больше потоков означает большую блокировку общих ресурсовБольше потоков означает больше создания и удаления потоков, что дорогоСистема может определенно исчерпать потоки /ОЗУ, а затем перестать обслуживать клиентов (в сценарии веб-сервера это может фактически остановить службу)
7 голосов | спросил rony l 4 42010vEurope/Moscow11bEurope/MoscowThu, 04 Nov 2010 19:27:57 +0300 2010, 19:27:57

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132