首页 > 解决方案 > 线程在操作系统上下文中的作用是什么?

问题描述

我试图理解Async编程和Multi Threaded编程之间的区别。我们async说线程接受一个任务(T1)并开始执行它。如果同时另一个任务(T2)出现,它不会等待 T1 完成,而是在 T1 在后台执行时选择第二个任务 T2。

突出显示的部分是我最困惑的部分。那么当线程拿起 T2 时,谁在执行 T1?线程在操作系统上下文中的作用是什么?它究竟是做什么的?

这可能是个愚蠢的问题,但我在互联网上长达数小时的折磨并没有让我满意。还是我只是问错了问题?

标签: c#multithreadingasynchronousoperating-system

解决方案


据推测,如果通过async编程意味着异步编程,则它仅意味着当某些事件可能以未严格定义的顺序、周期发生时对计算流进行编程。从这个角度来看,两种机制:线程和 I/O 都是异步的。然而.NETasync机制与它们没有直接关系。本质上,它只是一个框架,以一种模仿同步执行但保持异步语义的形式包装类异步计算。也就是说,它不控制底层操作是异步还是同步(它由操作本身控制),甚至可以成功应用于这两种类型的操作,但与异步操作一起使用它更有利,这可能是为什么开发人员将这种机制与异步编程密切相关。所以你的问题的答案是“这取决于”。在 I/O 绑定异步操作的情况下,它的 IO 子系统以及 I/O 设备可以在 T2 被拾取并执行时提供 T1 的执行。在 CPU 密集型异步操作的情况下,它可以是另一个线程。如果操作是同步的,它们将一一执行,即同步。


推荐阅读