您的位置:首页 > 其它

boost:asio学习心得

2015-10-05 16:53 302 查看
Boost智能指针——shared_ptr


boost.asio系列——Timer


boost.asio系列——io_service


boost.asio系列——socket编程


boost.asio系列——buffer


Boost::asio
io_service 实现分析


Boost
ASIO proactor 浅析

reactor和proactor模式

Boost.Asio的使用技巧

Boost.Asio性能测试

使用asio搭建服务器

socket Tcp编程笔记--心跳包的实现逻辑

1.三种使用方式

1)single thread && single io_service, 最简单, 性能最一般

2)multithread && single io_service

3)io_service per thread. multi io_service.

这三个性能是依次递增的。

2.在使用ASIO时,io_servie应该尽量多,这样可以使其epoll_wait占用的时间片最多,这样可以最大限度的响应IO事件,降低响应时延。但是每个io_servie::run占用一个线程,所以io_servie最佳应该和CPU的核数相同。

3.io_service是一个工作队列的模型。在使用过程中一般有如下几个需要注意的地方:

run函数在io事件完成后会退出,导致后续基于该对象的异步io任务无法执行。

由于io_service并不会主动常见调度线程,需要我们手动分配,常见的方式是给其分配一个线程,然后执行run函数。但run函数在io事件完成后会退出,线程会终止,后续基于该对象的异步io任务无法得到调度。

解决这个问题的方法是通过一个asio::io_service::work对象来守护io_service。这样,即使所有io任务都执行完成,也不会退出,继续等待新的io任务。

boost::asio::io_service io;

boost::asio::io_service::work work(io);

io.run();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: