ASIO Executors

C++11 标准库为我们执行异步任务提供了一个接口 async,一般这个接口里面会创建一个线程来执行。

std::future<int> f = std::async([]{
  // ...
  return 42;
});

int i = f.get(); 

Boost 1.74 ASIO 开始支持 executors,能够以不同方式执行异步任务。

std::future<int> f = post(
  package([]{
    // ...
    return 42;
  })
);

int i = f.get()

Executor

执行器是用来管理一个函数对象在什么时候,在什么地点,以何种方式执行一个函数对象的一组规则集。它提供了 context() 来访问执行上下文,以及 dispatch, post, defer 操作。

特点:可以持续或短暂存活,是一个轻量可拷贝的对象。

比如:system_executor, strand

Execution context

执行上下文是指一个用来执行函数对象的场所。可以通过 get_executor() 来获取执行上下文关联的执行器,也就说获取的这个执行器执行函数对象时将在这个上下文上执行。

特点:一般在程序运行期间持续存活,并且不允许被拷贝。

比如:system_context, static_thread_pool

Dispatch, post and defer

这是用于提交用来执行的函数对象的三个基本操作,它们之间的不同体现在执行函数的迫切程度。