.NET任务中的代码是否最终通过本机Windows线程在CPU或CPU Core上运行?

2 .net c# multithreading task task-parallel-library

参考以下帖子,这使得人们相信.NET任务在没有涉及本机OS线程的情况下执行.这是真的?

Task(System.Threading.Task)和Thread之间的区别

编辑

在查看重复的问题时,我找不到直接解决实例化.NET Task类最终将在本机OS线程上执行的问题的答案.它们指的是线程,但要么不在托管和本机操作系统线程之间辨别,要么仅在托管线程之间辨别.唯一可能重复的是我自己对其中一个问题的回答.

但是在挖掘自己时,似乎没有.NET的"魔力"可以避免本机操作系统线程.Windows内核没有允许更改.这与几十年前我自己的操作系统体验一致.简而言之,没有任何人可以编写的应用程序代码不能在本机Windows操作系统线程上运行.

关于进程和线程 管理线程

也:

Windows内核内部流程架构

Windows内核的体系结构

Windows内核架构的演变

Nic*_*ick 5

答案是:这取决于.

涉及一些计算工作的任务将在线程上运行,通常是线程池中的线程.

长时间运行的任务,即使用TaskCreationOptions.LongRunning专用线程创建的选项创建的,为其创建.

I/O任务,就像await stream.ReadAsync() 根本没有线程一样.该操作被发送到IO设备,CPU可以随意做任何事情.只有当设备准备好了所请求的数据时,它才会中断 CPU,它会执行一些低级处理,最终操作系统从线程池中获取一个线程来完成任务并使结果可用于您的程序.更多细节在这里.