Подтвердить что ты не робот

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

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

maxWorkerThreads="25" 
maxIoThreads="25"

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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