【问题标题】:boost asio io_service object and the underlying threadsboost asio io_service 对象和底层线程
【发布时间】:2013-05-01 19:55:51
【问题描述】:

我正在使用 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服务对象。

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

【问题讨论】:

  • 无论如何,请注意,将线程数增加到超过内核数通常是没有意义的。

标签: c++ boost boost-asio


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2011-12-18
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多