簡體   English   中英

Windows線程池和CLR線程池之間有什么區別

[英]what's difference between windows thread pool and CLR thread pool

我讀了一些關於窗口線程池的部分。 它看起來像CLR線程池。

CLR基於Windows,所以CLR線程基於windows線程池,是不是?

我知道每個.net進程都有一個線程池,windows線程池中的情況是什么? 操作系統有一個線程池還是多個?

在C#中,開發人員可以通過代碼控制窗口線程池嗎?

這是一個沒有直接答案的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線程池似乎並不相關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM