最近在研究操作系统,遇到了这个问题。
线程是在C#用户级还是内核级创建的,比如:
Thread mythread=new Thread(ThreadStart(something));
据我所知,内核级CPU密集型线程的进程可以比用户级别的运行速度更快。因为《现代操作系统》一书中说“用户级线程的调度不会陷入内核,这就是为什么它们比内核级线程更轻量级”。
所以我认为用户级线程不能在不同的cpu上运行,这需要捕获到内核中。
在linux中,创建的线程是pthread_create
是内核级别的。所以我很好奇.Net C# 的特性。
这是 UNIX 术语,在 Windows 上你会说“光纤或线程”。术语“绿色线程”也是“用户线程”的一种非常常见的说法。
这不是由 C# 或 CLR 决定的,而是由CLR host这决定了这一点。
主机是将 CLR 与操作系统或主机进程结合起来的粘合剂。针对 Silverlight、.NET Compact、.NETCore、Xbox、Windows Phone、Hololens 等的程序始终具有自定义主机来适应目标操作系统。 IIS 和 SQL Server 是非托管程序的常见示例,它们具有自定义主机以允许托管代码执行,分别是 ASP.NET 和 CLR 存储过程。许多其他程序允许使用自定义主机使用 C# 编写脚本,AutoCAD 就是典型的示例。
所以CLR本身并不创建线程,它要求宿主来创建线程。这ICLRTask and ICLR任务管理器接口可以完成这项工作。线程池也是主机的职责,ICorThreadpool接口.
因此,从形式上来说,你是否会得到纤维或线是未知的。值得注意的是,这些接口是应 SQL Server 团队的请求添加的。他们当时在光纤上投入了大量资金,并希望能够选择在光纤上执行 CLR 存储过程。一切都完成了,但大约在同一时间,2000 年代初的多核革命扰乱了这一局面。他们实际上并没有发货。我不知道有任何主机使用光纤,尽管您永远无法确定自定义托管是否常见。
因此,可以非常安全地假设您将获得“内核线程”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)