有区别吗?

异步调用是否总是创建一个新的线程? 两者有什么区别?

异步调用是否总是创建或使用新的线程?

维基百科说:

在计算机编程中,异步事件是独立于主程序流程发生的事件。 异步操作是在非阻塞方案中执行的操作,允许主程序流继续处理。

我知道异步调用可以在单线程上完成吗? 这怎么可能?


这个问题太过笼统,无法回答。

在一般情况下,异步调用不一定会创建一个新线程。 这是实现它的一种方式,预先存在的线程池或外部进程是其他方式。 它很大程度上取决于语言,对象模型(如果有的话)和运行时环境。

异步就意味着调用线程不会坐等静态响应,异步活动也不会在调用线程中发生。

除此之外,你将需要更具体。


只要需要异步执行的操作不需要CPU执行工作,就可以在不产生另一个线程的情况下完成该操作。 例如,如果异步操作是I / O,则CPU不必等待I / O完成。 它只需要启动操作,然后可以在I / O硬件(磁盘控制器,网络接口等)执行I / O工作时继续进行其他工作。 硬件通过中断CPU来让CPU知道它何时完成,然后OS将事件传送到您的应用程序。

通常,更高级别的抽象和API不会公开操作系统和底层硬件可用的底层异步API。 在这种情况下,创建线程来执行异步操作通常更容易,即使产生的线程只是等待I / O操作。

如果异步操作要求CPU执行工作,那么通常该操作必须在另一个线程中发生,以便它是真正异步的。 即使这样,如果有多个执行单元,它也只会是异步的。


不,异步调用并不总是涉及线程。

他们通常会开始某种与主叫方并行的操作。 但是该操作可能由另一个进程,操作系统,其他硬件(如磁盘控制器),网络上的某台其他计算机或人类来处理。 线程并不是平行完成任务的唯一方法。

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

上一篇: Is there a difference?

下一篇: xcodebuild Archive failed but xcarchive created