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线程池似乎并不相关.