Рабочие потоки Пула потоков.NET и асинхронные потоки IO

Хорошо, насколько я понимаю, Пул потоков.NET поддерживает много фоновых потоков, готовых использоваться для задач некоторого вида.

Get/SetMinThreads и методы Get/SetMaxThreads содержат два параметра, которые могут быть возвращены или скорректированы.

Согласно MSDN эти два параметра указывают на количество рабочих потоков и количество потоков, используемых для асинхронных операций IO.

Какие операции используют их определенный тип потока?

Рабочие потоки:

  1. QueueUserWorkItem я предполагаю.
  2. Что-нибудь еще?

Асинхронные потоки IO:

  1. Используемый при вызове Beginxxx, Endxxx на потоках файла, например? (Или сеть, последовательный порт, и т.д.)
  2. Что-нибудь еще?

Спасибо за любое разъяснение или хорошую ссылку на предмет.

6
задан Andy 3 July 2010 в 20:21
поделиться

1 ответ

Да, QUWI, но также метод BeginInvoke () типа делегата. BackgroundWorker, используемый несколькими классами, является наиболее известным примером. Что под капотом просто использует BeginInvoke () делегата.

Потоки завершения ввода-вывода - это очень низкоуровневая функция Windows, позволяющая быстро запускать код после завершения запроса ввода-вывода. Наиболее заметно из последнего аргумента функции ReadFileEx (), есть и другие. Управляемый эквивалент предоставляется через ThreadPool.BindHandle ().

Задача классов .NET - понять это правильно. Его используют немногие: FileStream, PipeStream, FileSystemWatcher, Socket, внутренний рабочий поток SerialPort и некоторые классы поддержки каналов WCF.

Я лично не большой поклонник раскрытия этих деталей конфигурации в API, особенно потоков завершения ввода-вывода. Это что-то вроде отговорки со стороны команды BCL, с их стороны немного FUD. Эти настройки влияют на всю программу, значения по умолчанию уже довольно щедры. Работа с ними примерно эквивалентна вызову GC.Collect (). Если вам когда-нибудь удастся найти вескую причину для их изменения, лучше застрять в адской дыре, и у вас останется всего один час, чтобы успеть на самолет домой. Был там :)

6
ответ дан 17 December 2019 в 02:21
поделиться
Другие вопросы по тегам:

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