Windows线程池和CLR线程池之间有什么区别

roa*_*oul 7 c# clr multithreading pool

我读了一些关于窗口线程池的部分.它看起来像CLR线程池.

CLR基于Windows,所以CLR线程基于windows线程池,是不是?

我知道每个.net进程都有一个线程池,windows线程池中的情况是什么?操作系统有一个线程池还是多个?

在C#中,开发人员可以通过代码控制窗口线程池吗?

Han*_*ant 16

这是一个没有直接答案的CLR实施问题.CLR无法确定ThreadPool的实现方式.这是CLR主机的工作.一层将CLR与操作系统集成在一起的软件.CLR用于完成线程事务的核心接口是IHostThreadPoolManager.它是一个非托管的COM接口,但您可以轻松识别与ThreadPool类成员几乎一对一的映射.

CLR主机有许多实现.更容易识别的是桌面应用程序的默认CLR主机,由mscoree.dll实现.对于不同的Windows版本,它有不同的版本.和ASP.NET,Sql Server,Visual Studio Hosting进程,Silverlight,Windows Phone,XBox的自定义主机.对于不太容易识别的应用程序,大型非托管应用程序可以自己托管CLR,以支持以.NET语言实现的脚本.AutoCAD等CAD程序是标准示例.

线程的核心概念在CLR中虚拟化.IClrTask和IClrTaskManager是托管接口.这允许主机在操作系统线程之外的其他东西上实现线程.像纤维一样.顺便说一句,实际上没有人这样做.

当然,Windows有自己的api用于线程池.该CreateThreadPool() WINAPI函数获取球滚动.但是,使用dumpbin.exe/imports戳我的机器上的mscor*.dll文件时,我看不到它被使用了.至少部分问题可能是CreateThreadPool()是后来的winapi函数,仅在Vista之后可用.XP和早期的Windows版本实现起来要简单得多.所以,不,至少对于.NET 4.5.2的桌面版本,Windows线程池似乎并不相关.