В чем разница между рабочим потоком и потоком ввода-вывода? - PullRequest
27 голосов
/ 26 сентября 2008

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

maxWorkerThreads="25" 
maxIoThreads="25"

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

Ответы [ 2 ]

26 голосов
/ 26 сентября 2008

Принципиально не много, это все о том, как 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

12 голосов
/ 26 сентября 2008

Просто чтобы добавить к чедмьеру ... Похоже, потоки ввода-вывода были старым способом обслуживания запросов ASP.NET,

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

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

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

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

...