如果你使用异步等待,而你的机器只有一个处理器,会发生什么

本文关键字:处理器 有一个 什么 异步 等待 如果 机器 | 更新日期: 2023-09-27 18:30:07

这是我不理解的。假设I

DoSomething();
await SomeAsyncMethod;
DoSomethingElse();

而我的机器一次只能运行一个任务。然后SomeAsyncMethod必须以某种方式阻止程序——也许它不会立即阻止DoSomethingElse()运行,它将不得不在某个时刻中断程序,以便运行SomeAsyncMethod。正确的

如果你使用异步等待,而你的机器只有一个处理器,会发生什么

然后SomeAsyncMethod必须以某种方式阻止程序

不,不是。它是异步的。异步的定义意味着它不阻塞;调用程序将在方法返回后继续,而不会完成其工作,并且工作将在稍后的时间点完成。

它将不得不在某个时刻中断程序,以便运行SomeAsyncMethod。正确的

没有。它是异步的。它甚至可能根本不是需要由CPU执行的工作。

让我们在这里打个比方。你订购了一个包裹。在包裹到达之前,你被禁止做任何事情吗?你是不是被迫坐在家门前明确地等待包裹,在包裹到达之前不能做任何其他事情?或者你可以离开,做其他工作,然后在某个时间点,当包裹到达你的台阶上时(不一定是立即的,你可以在包裹送达后的任何时候去取),你可以打开它,做任何你需要做的事情来处理你点的东西。

这是一个固有的异步操作。您启动异步操作(订购一些东西),然后您可以做任何您想做的事情,直到您启动的操作完成,而不会占用您的时间,然后在某个时间点,在操作完成后,您可以使用该操作的结果。

一种类型的异步操作,当编程要求另一个线程执行一些CPU绑定的工作时,您可以执行该操作,该工作可能(也可能不)在第二个处理器上执行,但还有各种其他类型的异步操作,不需要其他处理器,例如IO(例如,执行网络请求),它实际上总是天生异步的,并且与"订购包"的类比非常吻合,在一些触发(事件等)后执行操作,你可以有一个异步操作,它本身由一个或多个其他异步操作组成,等等。

请参阅这篇文章,了解更深入地解释的另一个例子。