2013-05-01 163 views
1

我正在使用boost asio庫。這是我實現boost asio io_service對象和底層線程

boost::asio::io_service ioservice; 
boost::asio::io_service::work work(ioservice); 
boost::thread_group threads; 
for (int i = 0; i < 10; i++) 
{ 
    threads.create_thread(
     boost::bind(&boost::asio::io_service::run, &ioservice)); 
} 

然後我通過IOService對象的這個實例作爲參數,每當我需要一個IO服務對象(如異步讀/寫/定時器)。如果我需要處理大量的異步操作,我只是增加線程數。

有些同事創建多個io服務對象只有一個工作線程。

哪一個是正確的實現?可以改進嗎?

+2

在任何情況下,請注意,增加超出內核數量的線程數通常沒有意義。 – 2013-05-02 06:53:14

回答

2

兩種方法都是正確的,但這取決於您要完成的工作。 io_service是一個很好的跨平臺線程安全工作隊列。

如果您想要在某個線程上處理某些工作(即序列化某些工作項),則在一個線程上運行一個io_service是有意義的。

如果你想要處理一些工作,但不關心在哪個線程上處理它或訂單,那麼在多個線程上運行一個io_service是有意義的。