c# - 线程在操作系统上下文中的作用是什么?
问题描述
我试图理解Async
编程和Multi Threaded
编程之间的区别。我们async
说线程接受一个任务(T1)并开始执行它。如果同时另一个任务(T2)出现,它不会等待 T1 完成,而是在 T1 在后台执行时选择第二个任务 T2。
突出显示的部分是我最困惑的部分。那么当线程拿起 T2 时,谁在执行 T1?线程在操作系统上下文中的作用是什么?它究竟是做什么的?
这可能是个愚蠢的问题,但我在互联网上长达数小时的折磨并没有让我满意。还是我只是问错了问题?
解决方案
据推测,如果通过async
编程意味着异步编程,则它仅意味着当某些事件可能以未严格定义的顺序、周期发生时对计算流进行编程。从这个角度来看,两种机制:线程和 I/O 都是异步的。然而.NETasync
机制与它们没有直接关系。本质上,它只是一个框架,以一种模仿同步执行但保持异步语义的形式包装类异步计算。也就是说,它不控制底层操作是异步还是同步(它由操作本身控制),甚至可以成功应用于这两种类型的操作,但与异步操作一起使用它更有利,这可能是为什么开发人员将这种机制与异步编程密切相关。所以你的问题的答案是“这取决于”。在 I/O 绑定异步操作的情况下,它的 IO 子系统以及 I/O 设备可以在 T2 被拾取并执行时提供 T1 的执行。在 CPU 密集型异步操作的情况下,它可以是另一个线程。如果操作是同步的,它们将一一执行,即同步。
推荐阅读
- html - 如何在遍历angular7中的元素列表时连续显示三个元素?
- php - PHP 循环和 For 循环
- python - QTableWidget 中的依赖 QComboBoxes
- python - 是否有用于时空聚类的 python 函数?
- c++ - notepad++如何知道打开的文件被其他应用程序修改了?
- c - 在简单程序上使用 ftrace,内联汇编 __asm__("leave") 导致段错误
- sql-server - SQL Server:错误“子查询返回超过 1 个值”
- geolocation - WGS84 到 MSL 和相反
- sql - 如何在 IF ELSE SQL Server 中使用 UPDATE
- batch-file - 在 echo 命令的迭代之间切换(批处理文件)