Boost asio io_service对象和底层线程
boost asio io_service object and the underlying threads
我正在使用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
在多个线程上运行是有意义的。
相关文章:
- 即发即弃 std::线程对象清理自身
- C++:处理线程本地对象销毁
- 结束另一个线程中使用的对象的生存期
- 将对象传递给多线程对象 Qt
- 运行线程和线程对象之间的关系
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 如何通过id获取线程对象?
- 线程对象函数 C++
- 关闭MFC对话框时多线程对象被破坏
- 线程对象的 WaitForSingleObject 在 DLL 卸载中不起作用
- 是否可以获取主线程的线程对象,并用它“join()”
- 如何在 C++11 中创建线程对象数组
- 如何在线程本身终止时删除提升线程对象
- 提升线程工作线程对象在线程完成后的重用
- 多线程对象中的堆损坏
- 从另一个对象指向线程对象:危险
- Qt 在另一个线程中排队工作线程对象的退出事件
- 线程对象在创建后立即销毁自身
- visual studio 2010 -是否有办法在旧的C/ c++编译器中使用c++ 11线程对象?
- 在c++中,两个线程/对象在一个对象集合中可以安全地做什么?