Хорошо, насколько я понимаю, Пул потоков.NET поддерживает много фоновых потоков, готовых использоваться для задач некоторого вида.
Get/SetMinThreads и методы Get/SetMaxThreads содержат два параметра, которые могут быть возвращены или скорректированы.
Согласно MSDN эти два параметра указывают на количество рабочих потоков и количество потоков, используемых для асинхронных операций IO.
Какие операции используют их определенный тип потока?
Рабочие потоки:
Асинхронные потоки IO:
Спасибо за любое разъяснение или хорошую ссылку на предмет.
Да, QUWI, но также метод BeginInvoke () типа делегата. BackgroundWorker, используемый несколькими классами, является наиболее известным примером. Что под капотом просто использует BeginInvoke () делегата.
Потоки завершения ввода-вывода - это очень низкоуровневая функция Windows, позволяющая быстро запускать код после завершения запроса ввода-вывода. Наиболее заметно из последнего аргумента функции ReadFileEx (), есть и другие. Управляемый эквивалент предоставляется через ThreadPool.BindHandle ().
Задача классов .NET - понять это правильно. Его используют немногие: FileStream, PipeStream, FileSystemWatcher, Socket, внутренний рабочий поток SerialPort и некоторые классы поддержки каналов WCF.
Я лично не большой поклонник раскрытия этих деталей конфигурации в API, особенно потоков завершения ввода-вывода. Это что-то вроде отговорки со стороны команды BCL, с их стороны немного FUD. Эти настройки влияют на всю программу, значения по умолчанию уже довольно щедры. Работа с ними примерно эквивалентна вызову GC.Collect (). Если вам когда-нибудь удастся найти вескую причину для их изменения, лучше застрять в адской дыре, и у вас останется всего один час, чтобы успеть на самолет домой. Был там :)