в чем разница между пулом потоков Windows и пулом потоков CLR

Я прочитал несколько сегментов о пуле оконных потоков. Похоже на пул потоков CLR.

CLR основан на Windows, поэтому поток CLR основан на пуле потоков Windows, верно?

Я знаю, что каждый процесс .net имеет один пул потоков, как обстоят дела с пулом потоков Windows? ОС имеет один пул потоков или много?

В С# может ли разработчик управлять пулом оконных потоков с помощью кода?


person roast_soul    schedule 12.07.2014    source источник
comment
Когда вы спрашиваете о чем-то, что вы читали, включите ссылку (или хотя бы название публикации).   -  person Henk Holterman    schedule 12.07.2014


Ответы (1)


Это один из тех вопросов реализации 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