一个方法是异步的意味着什么?

什么是异步方法。 我想我知道,但我一直把它与并行性混淆起来。 我不确定异步方法与并行方法之间有什么区别。

还有什么区别使用线程类和异步类?

编辑

一些展示异步,线程和并行性之间差异的代码会很有用。


什么是异步方法?

当我们谈论可能冗长的操作时,异步方法进入讨论。 通常我们需要完成这样的操作才能有意义地继续执行程序,但我们不希望在操作完成之前“暂停”(因为暂停可能意味着例如UI停止响应,这显然是不合需要的)。

异步方法就是我们所说的开始冗长操作的方法。 该方法应该做它启动操作所需的,并且“非常快地”返回,以便没有处理延迟。

异步方法通常返回一个令牌,调用者可以使用该令牌来查询操作是否完成以及结果是什么。 在某些情况下,他们将回调(委托)作为参数; 当操作完成时,调用回调函数来通知调用者他们的结果已准备好并将其传回。 这是一个常用的回调签名,虽然通常回调可以看起来像任何东西。

那么究竟是谁实际执行冗长的操作?

我在上面说过,一个异步方法开始一个长度操作,但是在这种情况下“开始”意味着什么? 由于该方法立即返回,因此正在进行的实际工作在哪里?

在一般情况下,执行线程需要监视整个过程。 既然它不是调用暂停的异步方法的线程,谁呢? 答案是,从托管线程池中为此目的选择一个线程。

与线程有什么关系?

在这种情况下,我对“线程化”的解释只不过是你明确地启动了自己的线程并委托它来同步执行有问题的任务。 该线程将阻塞一段时间,并且可能会在操作完成时向您的“主”线程(可自由继续执行)发出信号。

这个指定的工作者线程可能会被拉出线程池(注意:不建议在线程池线程中进行非常冗长的处理!),或者它可能是您刚刚为此目的而启动的一个线程池。


首先,什么是方法和什么是线程? 方法是一个工作单元,它或者(1)执行有用的副作用,如写入文件,或者(2)计算结果,例如制作分形的位图。 线程是执行该工作的工作者。

如果为了使用方法 - 获得副作用或结果 - 一个方法是同步的 - 您的线程必须从请求要完成的工作开始直到完成的地方不做其他任何事情。

如果你的线程告诉方法它需要完成工作,那么方法是异步的,并且方法说“好的,我会这样做,当它完成时我会给你打电话”。

通常,异步方法的作用是让另一个工作人员 - 它从池中获取一个线程。 如果该方法需要大量使用CPU,则尤其如此。 但不总是; 没有要求异步方法将另一个线程加速。

那有意义吗?


假设你需要打扫房子,做饭,并让孩子们睡觉。

同步:

你打扫房子,然后做饭,然后把孩子们放在床上。

平行:

你雇用3个人来清理房子,做饭,并让孩子们上床睡觉。 但你不相信他们,所以保持监督的角色,看着他们,等待他们完成。 只有在他们全部完成后才能获得报酬。

异步:

你一个孩子打扫房子,另一个孩子做饭。 当每个人完成他们的家务时,他们就自己上床睡觉了,而你在电视机前放上一杯酒。

链接地址: http://www.djcxy.com/p/50823.html

上一篇: What does it mean for a method to be asynchronous?

下一篇: Synchronous and asynchronous activities