2013-05-01 167 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是有意义的。