异步编程设计模式

来源:互联网 发布:中兴笔试编程题 编辑:程序博客网 时间:2024/06/11 02:44

异步化机制的模型演进

一、异步非阻塞调用模型

去掉调度和中断的情况,线程的执行被打断一般是由于两个原因:

1,与低速设备通信,如IO、网络通信、打印到屏幕等。

2,竞争资源,如内存、临界区、句柄等。

传统方式下,这些相关的接口都被设计成同步阻塞接口。

同步调用方式意味着调用者必须获取了调用的结果后才能继续下一步的处理,阻塞调用方式意味着在调用结果返回前调用者将被阻塞。


同步阻塞调用方式带来的问题是,步骤只能串行的执行,无法利用多处理器的优势,导致请求处理的延时增大,影响系统的吞吐量。

异步非阻塞调用方式采用后台线程和异步接口来解决此问题。

异步接口会两次返回给调用者,第一次是接口调用的同步返回,用于通知调用者该次请求已经被接收,第二次是调用结果的异步返回,用于通知调用者该次请求处理的结果。 -- 需要注意的是,两次返回的先后顺序是不能被假定的,在很多情况下调用结果的返回会先于接口调用的返回。

在调用异步接口时,被调用者生成新的后台线程,并将该次接口调用同步返回,此时的调用者还无法获取此次调用的结果,但由于该次调用已经返回,因此调用者可以并发的执行其他操作而不必等待此次请求的处理完成。

在新启用的后台线程里,被调用者将开始进行真正的处理过程,即使该过程中发生阻塞,由于阻塞发生在新的后台线程中,因而对调用者不会造成影响。

请求处理完成后,被调用者再将调用结果同步到调用者,通常可以采用回调函数或消息通信机制来实现,调用者获取了调用结果后,就可以进行进一步的处理了。

异步非阻塞调用方式可以提升流程并发度,充分发挥多处理器的优势,以降低系统的响应时延,提升系统的吞吐量。