Это один из тех вопросов реализации CLR, на который нет прямого ответа. CLR не должна определять, как реализован ThreadPool. Это работа узла CLR. Уровень программного обеспечения, интегрирующего среду CLR с операционной системой. Основной интерфейс, который CLR использует для работы с пулом потоков, — это IHostThreadPoolManager. а>. Это неуправляемый COM-интерфейс, но у вас не возникнет проблем с распознаванием почти однозначного сопоставления с членами класса ThreadPool.
Существует множество реализаций хоста CLR. Более узнаваемыми являются хост CLR по умолчанию для настольных приложений, реализованный mscoree.dll. Существуют разные его версии для разных версий Windows. И ASP.NET, Sql Server, процесс хостинга Visual Studio, пользовательский хост для Silverlight, Windows Phone, XBox. И менее узнаваемые, большие неуправляемые приложения могут сами размещать CLR для поддержки сценариев, реализованных на языке .NET. Программы CAD, такие как AutoCAD и т. д., являются стандартными примерами.
Основное понятие потока виртуализировано в среде CLR. IClrTask и IClrTaskManager являются для этого хост-интерфейсами. Что позволяет хосту реализовать поток на чем-то другом, кроме потока операционной системы. Как волокно. На самом деле никто этого не делает.
Конечно, у Windows есть собственный API для пула потоков. Функция winapi CreateThreadPool() получает это мяч прокатки. Однако, копаясь в файлах mscor*.dll на моей машине с помощью dumpbin.exe /imports, я не вижу, чтобы он использовался. По крайней мере, часть проблемы может заключаться в том, что CreateThreadPool() является более поздней функцией winapi, доступной только начиная с Vista. XP и более ранние версии Windows имели гораздо более простую реализацию. Итак, нет, по крайней мере, для настольной версии .NET 4.5.2 пул потоков Windows не имеет значения.
person
Hans Passant
schedule
12.07.2014