异步操作

异步操作是 Boost.Asio 异步模型中的基本组合单元。异步操作代表在后台启动并执行的任务,而启动该任务的用户代码可以继续执行其他工作。
从概念上讲,异步操作的生命周期可以用以下事件和阶段来描述:

事件:异步操作通过调用启动函数开始
阶段1:异步操作未完成
事件:外部可观测到的副作用(如果有的话)被完全确定。完成处理程序排队等待执行。
阶段2:异步操作已完成
事件:使用操作的结果调用完成处理程序
启动函数是用户可以调用的函数,用于启动异步操作。
完成处理程序是一个由用户提供的、仅移动的函数对象,它最多被调用一次,并带出异步操作的结果。完成处理程序的调用会告诉用户一些已经发生的事情:操作已完成,操作的副作用(side effects)已建立。
启动函数和完成处理程序被纳入用户代码如下:

同步操作作为单个函数来实现,因此具备一些固有的语义属性。为了便于灵活和高效的组合,异步操作采用了同步操作的部分语义属性。
同步操作的特性
异步操作的等效属性
当一个同步操作是泛型的(即模板),其返回类型是由函数及其参数确定的。
当一个异步操作是泛型的,完成处理器的参数类型和顺序是由初始化函数及其参数确定的。
如果一个同步操作需要临时资源(如内存、文件描述符或线程),该资源会在函数返回前释放。
如果一个异步操作需要临时资源(如内存、文件描述符或线程),该资源会在调用完成处理器(Complete Handler)之前释放。
后者是异步操作的重要属性,因为它允许完成处理器在没有资源重叠的情况下启动进一步的异步操作。考虑一个简单(且相对常见)的情况,即同一个操作在链中一遍又一遍地重复:

通过确保在完成处理器运行之前释放资源,我们避免了操作链的峰值资源使用率的加倍。
Last updated