Рабочие потоки .NET Threadpool и асинхронные потоки ввода-вывода - PullRequest
6 голосов
/ 04 июля 2010

ОК, насколько я понимаю, .NET Threadpool поддерживает несколько фоновых потоков, готовых к использованию для каких-либо задач.

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

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

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

Рабочие темы:

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

Асинхронные потоки ввода-вывода:

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

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

1 Ответ

6 голосов
/ 04 июля 2010

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

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

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

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

...