Boost asio io_service对象和底层线程

boost asio io_service object and the underlying threads

本文关键字:线程 对象 service asio io Boost      更新时间:2023-10-16

我正在使用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对象的实例作为参数传递。G异步读/写/定时器)。如果我需要处理很多异步操作,我只是增加线程的数量。

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

哪一个是正确的实现?

这两种方法都是正确的,但这取决于您想要完成的任务。io_service是一个很好的跨平台线程安全工作队列。

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

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