最近我正在研究操作系统,并遇到了这个问题.
线程是在C#用户级别还是内核级别创建的,如:
Thread mythread=new Thread(ThreadStart(something));
Run Code Online (Sandbox Code Playgroud)
据我所知,内核级别的cpu密集型线程的运行速度可能比用户级别的运行速度快. 因为现代操作系统这本书说"用户级线程的时间表不会陷入内核,这就是为什么它们与kernl级线程相比更轻量级".
所以我认为用户级线程无法在不同的cpu上运行,这需要陷入内核.
在linux中,创建的线程pthread_create是内核级别.所以我对.Net C#的功能感到好奇.
这是unix术语,在Windows上你会说"光纤或线程".术语"绿色线程"也是说"用户线程"的一种非常常见的方式.
由C#和CLR决定这一点,CLR主机决定这一点.
主机是将CLR与操作系统或主机进程结合的粘合剂.针对Silverlight,.NET Compact,.NETCore,Xbox,Windows Phone,Hololens等的程序始终具有自定义主机以适应目标的操作系统.IIS和SQL Server是非托管程序的常见示例,它们具有允许托管代码执行的自定义主机,分别是ASP.NET和CLR存储过程.许多其他程序允许使用自定义主机在C#中编写脚本,AutoCAD是典型示例.
因此CLR本身不会创建一个线程,它会要求主机执行此操作.该ICLRTask和ICLRTaskManager接口得到那份工作完成.线程池也是主机,ICorThreadpool接口.
因此,您将获得光纤或线程,这在形式上是不可知的.值得注意的是,这些接口是在SQL Server团队的请求下添加的.他们当时大量投资光纤,并希望选择在光纤上执行CLR存储过程.完成所有工作,但在大约同一时间,21世纪初的多核革命让苹果推车感到不安.他们实际上没有发货.我不知道有任何主机使用光纤,虽然你永远不能确定自定义托管是常见的.
因此,假设您将获得"内核线程"是非常安全的.
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |