在中执行代码.NET任务最终通过本机Windows线程在CPU或CPU核心上运行



参考下面的帖子,它让人相信a。NET任务在不涉及本机操作系统线程的情况下执行。这是真的吗?

任务(System.Threading.Task)和线程之间的区别

编辑

在复习重复的问题时,我找不到直接解决实例化问题的答案。NET任务类最终将在本机操作系统线程上执行。它们指的是线程,但不是区分托管和本机操作系统线程,就是只指托管线程。唯一可能重复的是我自己对其中一个问题的回答。

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

关于进程和线程托管线程

还有:

Windows内核内部进程体系结构

Windows内核的体系结构

Windows内核体系结构的发展

答案是:这取决于情况。

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

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

I/O任务(如await stream.ReadAsync())根本没有线程。操作被发送到IO设备,CPU可以随心所欲。只有当设备准备好了请求的数据时,它才会中断CPU,进行一些低级处理,最终操作系统从线程池中获得一个线程来完成任务,并将结果提供给程序。更多详细信息请点击此处。

最新更新