大概介绍
concurrency_hint本身只是一个整型数值,在Boost.ASIO里经常可以看到作为构造函数参数传给各种服务(明确下:execution_context::service的子类),指明这些服务有没有多线程或其它并发逻辑,非并行情况下甚至还能稍稍简化下函数的执行逻辑,如:
if (more_handlers && !one_thread_)
wakeup_event_.unlock_and_signal_one(lock);
else
lock.unlock();
这是scheduler::do_run_one方法中的逻辑,如果scheduler是运行在单线程上,则直接解锁执行后续逻辑,否则解锁外还要唤醒其它的线程。这个one_thread_就是通过concurrency_hint经过计算得到的。
concurrency_hint与相关宏
以刚刚那个例子开始,以下展示scheduler的构造函数,里面需要传入一个concurrency_hint值,一系列计算后得到one_thread_这个flag的值:
scheduler::scheduler(
boost::asio::execution_context& ctx, int concurrency_hint)
: boost::asio::detail::execution_context_service_base<scheduler>(ctx),
//只关注这一坨
one_thread_(concurrency_hint == 1
|| !BOO