我想接受線程0中的連接,然後將此套接字發佈到其他線程(1 - 31)之一以進行負載均衡,然後我希望此套接字的所有其他操作都將位於同一線程中,通過使用協程 - 至避免線程上下文切換 g。如何使協程始終在同一個線程中工作?
我想用
io_service
+work
+vector<boost::thread>
上進行負載平衡不同的線程執行異步回調。但是與此同時我想通過在同一個線程內使用協程來執行所有其他的操作 - 沒有負載平衡和快速的上下文切換。
如果我使用boost.coroutine1通過使用boost::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));
衆所周知,協同程序之間的切換非常快,大約需要10-12 NS在x86_64:http://www.boost.org/doc/libs/1_64_0/libs/coroutine/doc/html/coroutine/performance.html
但如果協同程序的切換單個線程內發生,這是唯一的真實。因爲線程切換需要超過100 ns。
那麼我該如何讓協程總是在同一個線程中工作?
上次我試圖讓這個工作成功,同時程序在多線程下失敗了。我會看看新的纖維庫:http://www.boost.org/doc/libs/1_64_0/libs/fiber/doc/html/fiber/overview.html – Nim