В чем разница между рабочим потоком и потоком ввода / вывода?

Глядя на элемент processmodel в Web.Config, есть два атрибута.

maxWorkerThreads="25" 
maxIoThreads="25"

В чем разница между рабочими потоками и потоками ввода / вывода?

2 ответа

Решение

Фундаментально не много, это все о том, как ASP.NET и IIS распределяют объекты ожидания ввода / вывода и управляют конфликтами и задержкой при обмене данными по сети и передаче данных.

Потоки ввода / вывода выделены как таковые, потому что они будут выполнять ввод / вывод (как следует из названия) и, возможно, придется ждать "длинные" периоды времени (сотни миллисекунд). Они также могут быть оптимизированы и использованы по-разному, чтобы использовать преимущества портов завершения ввода-вывода в ядре Windows. Один поток ввода-вывода может управлять несколькими портами завершения для поддержания пропускной способности.

Windows имеет много возможностей для борьбы с блокировкой ввода / вывода, тогда как ASP.NET/.NET имеет простое понятие "поток". ASP.NET может оптимизировать ввод-вывод, используя больше возможностей неуправляемой потоковой обработки в ОС. Вы не захотите делать это все время для каждого потока, поскольку теряете много возможностей, которые дает вам.NET, поэтому существует различие между тем, как потоки предназначены для использования.

Рабочие потоки - это потоки, над которыми происходит обычная "работа" или просто простой код / ​​обработка. Рабочие потоки вряд ли будут сильно блокировать или ждать чего-либо и будут работать недолго и поэтому требуют более агрессивного планирования для максимизации вычислительной мощности и пропускной способности.

[Изменить]: Я также нашел эту ссылку, которая имеет особое отношение к этому вопросу: http://blogs.msdn.com/ericeil/archive/2008/06/20/windows-i-o-threads-vs-managed-i-o-threads.aspx

Просто чтобы добавить к chadmyers... Похоже, что I/O Threads был старый способ обслуживания запросов ASP.NET,

"Запросы в IIS 5.0 обычно обслуживаются через потоки ввода-вывода или потоки, выполняющие асинхронный ввод-вывод, потому что запросы отправляются рабочему процессу с использованием асинхронной записи в именованный канал".

с IIS6.0 это изменилось.

"Таким образом, все запросы теперь обслуживаются рабочими потоками, взятыми из пула потоков CLR, и никогда в потоках ввода-вывода".

Источник: http://msdn.microsoft.com/hi-in/magazine/cc164128(en-us).aspx

Другие вопросы по тегам