Boost C++ 库

……世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

异步操作 - Boost C++ 函数库
PrevUpHomeNext

在 Boost.Asio 的异步模型中,异步操作是组合的基本单元。异步操作代表在后台启动和执行的工作,而启动工作的用户代码可以继续处理其他事情。

从概念上讲,异步操作的生命周期可以用以下事件和阶段来描述

发起函数是用户可以调用以启动异步操作的函数。

完成处理程序是一个由用户提供的、只能移动的函数对象,它最多会被调用一次,并传递异步操作的结果。调用完成处理程序会告知用户已发生某事:操作已完成,并且操作的副作用已建立。

发起函数和完成处理程序会按如下方式纳入用户代码

同步操作,作为单个函数体现,因此具有几个固有的语义特性。异步操作为了便于灵活高效地组合,会从其同步对应项中采纳一些这些语义特性。

同步操作的特性

异步操作的等效特性

当同步操作是通用的(即模板)时,返回类型将从函数及其参数中确定性地推导出来。

当异步操作是通用的时,完成处理程序的参数的类型和顺序将从发起函数及其参数中确定性地推导出来。

如果同步操作需要临时资源(例如内存、文件描述符或线程),则在函数返回之前会释放该资源。

如果异步操作需要临时资源(例如内存、文件描述符或线程),则在调用完成处理程序之前会释放该资源。

后者是异步操作的一个重要特性,因为它允许完成处理程序启动进一步的异步操作,而不会出现资源使用重叠。考虑最简单(且相对常见)的情况,即同一操作在一个链中一遍又一遍地重复。

通过确保在完成处理程序运行之前释放资源,我们避免了操作链的峰值资源使用量翻倍。


PrevUpHomeNext