我读了一些关于窗口线程池的片段。它看起来像CLR线程池。
CLR是基于Windows的,所以CLR线程是基于windows线程池的,对吗?
我知道每个.net进程都有一个线程池,windows线程池的情况如何?操作系统有一个线程池还是多个线程池?
在C#中,开发人员可以通过代码控制窗口线程池吗?
发布于 2014-07-12 14:16:32
这是那些没有直接答案的CLR实现问题之一。不应由CLR来确定ThreadPool是如何实现的。这是CLR主机的工作。将CLR与操作系统集成的一层软件。CLR用来完成线程池操作的核心接口是IHostThreadPoolManager。它是一个非托管COM接口,但是您将很容易识别到与ThreadPool类成员的几乎一对一的映射。
CLR主机有许多实现。更容易识别的是由mscoree.dll实现的桌面应用程序的默认CLR主机。对于不同的Windows版本,有不同的版本。以及ASP.NET、Server、Visual宿主进程、Silverlight、Windows、XBox的自定义主机。而较难识别的是,大型非托管应用程序可以承载CLR本身,以支持用.NET语言实现的脚本编写。像AutoCAD等的计算机辅助设计程序是标准的例子。
线程的核心概念在CLR中虚拟化。IClrTask和IClrTaskManager是这方面的托管接口。它允许主机在操作系统线程之外的其他东西上实现线程。像纤维一样。实际上没人会这么做。
当然,Windows有自己的线程池api。CreateThreadPool() winapi函数得到球滚动。但是,在我的机器上使用dumpbin.exe /imports查看dumpbin.exe文件时,我没有看到它正在被使用。至少部分问题可能是CreateThreadPool()是一个更晚的winapi函数,只有在Vista之后才可用。XP和早期Windows版本的实现要简单得多。所以,不是,至少对于桌面版本的.NET 4.5.2,Windows线程池似乎不相关。
https://stackoverflow.com/questions/24713090
复制相似问题