我想接受线程 0 中的连接,然后将此套接字发布到其他线程之一(1-31)以进行负载平衡,然后我希望通过使用协程,使用此套接字的所有其他操作都将在同一个线程中 -避免线程间上下文切换g.
我想使用
io_service
++在不同的线程上执行异步回调以进行负载work
平衡vector<boost::thread>
。但同时我想通过只在同一个线程中使用协程来使用这个套接字执行所有其他操作——没有负载平衡和快速上下文切换。
如果我通过 using 使用 boost.coroutine1boost::asio::spawn()
那么协程可以在不同的线程上交替执行吗?
如果可以,那么如何使协程的回调始终在调用异步操作的同一线程中执行,即使io_service
绑定了许多线程(线程池)?
for (size_t i = 0; i < thread_num_executors; ++i)
thr_grp_executors.emplace_back(
boost::bind(&boost::asio::io_service::run, &io_service));
众所周知,协程之间的切换非常快,在 x86_64 上大约需要10-12 ns :http: //www.boost.org/doc/libs/1_64_0/libs/coroutine/doc/html/coroutine/performance.html
但这仅在协程切换发生在单个线程中时才成立。因为线程切换花费了超过 100 ns。
那么如何让协程始终在同一个线程中工作呢?