1

我正在使用 boost asio 库。这是我的实现

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));
}

然后,每当我需要 io 服务对象(例如异步读/写/定时器)时,我都会将此 ioservice 对象实例作为参数传递。如果我需要处理大量异步操作,我只需增加线程数。

一些同事只用一个工作线程创建多个 io 服务对象。

哪一个是正确的实现?可以改进吗?

4

1 回答 1

2

两种方法都是正确的,但这取决于您要完成的工作。Anio_service创建了一个很棒的跨平台线程安全工作队列。

如果您希望在某个线程上处理某些工作(即序列化某些工作项),那么让io_service一个线程在一个线程上运行是有意义的。

如果您想要处理一些工作,但不关心它在哪个线程上处理或处理顺序,那么让一个io_service在多个线程上运行是有意义的。

于 2013-05-01T20:27:54.777 回答