执行器
每个异步代理都有一个相关的执行器。代理的执行器决定了代理的完成处理程序如何排队并最终运行。
执行器的示例用途包括:
协调一组操作共享数据结构的异步代理,确保这些代理的完成处理程序不会并发运行(在 Boost.Asio 中,这种执行器被称为 strand)。
确保代理在指定的执行资源上运行(例如靠近数据或事件源的CPU或网络接口卡(NIC))。
标记一组相关的代理,从而使动态线程池能够做出更智能的调度决策(例如,将这些代理作为一个单元在执行资源之间移动)。
将所有完成处理程序排队到GUI应用程序的线程上运行,以便它们可以安全地更新用户界面元素。
返回异步操作的默认执行器,尽可能在触发操作完成的事件附近运行完成处理程序。
适配异步操作的默认执行器,在每个完成处理程序前后运行代码,例如日志记录、用户授权或异常处理。
为异步代理及其完成处理程序指定优先级。
异步代理内的异步操作使用代理的相关执行器来:
在操作尚未完成时,跟踪异步操作代表的工作的存在。
在操作完成时,将完成处理程序排队等待执行。
确保完成处理程序不会以重入方式运行,避免导致意外的递归和栈溢出。
因此,异步代理的相关执行器表示了代理应该如何、在哪里以及何时运行的策略,它作为一个横切关注点跨越代理所组成的代码。
Last updated