boost::asio 学习
安装
- 下载-解压
- 指定安装目录
./bootstrap.sh --prefix=/usr/local/boost_1_68_0
- 查看所有必须要编译才能使用的库
./b2 --show-libraries
- 其他编译选项
./b2 --help
- 只编译安装date_time库:
./b2 --with-date_time --buildtype=complete install
Proactor 设计模式
- 操作系统的 异步读写
- 异步读写在调用的时候可以 传递回调函数 或者 回送信号
- 当异步操作完毕,内核会自动调用回调函数或者发送信号
- 异步操作
- 定义一个异步执行操作,如Socket异步读写
- 异步操作处理器
- 执行 异步操作并在操作完成后,
- 执行 完成事件队列 中的 队列事件 (将事件加入完成事件队列?)
- 完成事件队列
- 缓冲 完成事件,直到被 异步事件信号分离器 移出队列
- 完成句柄(handler)
- 处理 异步操作的 结果
- 这是一个函数对象,通常使用boost::bind创建.
- 异步事件信号分离器
- 在 完成事件队列 中阻塞等待事件,受信后向调用者返回完成事件
- Proactor
- 调用 __异步事件信号分离器__将事件移出队列
- 并为这个事件分配一个完成句柄(如调用函数对象,这个功能封装在io_service类中)
- 初始化器?
- 执行特定程序代码启动异步操作.初始化器通过如basic_stream_socket等高层次接口与异步操作处理器交互,其返回stream_socket_service等类型的服务代理.
handler
- 符合某种函数签名的 回调函数
- 事件 对应 handler
- 可拷贝(io_service存储handler的拷贝,发生异步事件时调用)
- 可以是函数、函数指针、函数对象、function对象、bind/lambda表达式等
io_service
- 异步平台
- 负责连接 应用程序 与 操作系统 的IO服务
- 代表操作系统里的 异步处理机制 (如epoll)
- asio库中的其他对象 向io_service对象提交异步操作的handler
- run()成员函数
- 启动事件循环
- 阻塞等待所有注册到io_service的事件完成
- 阻塞未完成的异步操作
strand ?
- boost::asio中自己的线程概念
- 序列化异步操作?
- 保证异步代码在多线程的环境中可以正确的执行?
不需要互斥量
可以理解为是一组handler的锁(多个线程对一个io_service对象执行run()时,strand来保证不存在线程并发访问的问题)
IO操作的数据缓冲区
- mutable_buffer
- const_buffer
signal_set
- add()成员函数
- 向signal_set添加要捕获的信号
- 向io_service注册 信号事件
- async_wait()成员函数
- 通知io_service 异步 的执行IO操作
- 向io_service注册 信号处理函数
定时器
参考资料
两种高性能 I/O 设计模式 Reactor 和 Proactor
Boost.Asio基本原理
boost::asio中文文档 Boost.Asio概念图
为什么异步处理还要调用阻塞式的 run() 方法
boost::asio 学习的更多相关文章
- boost asio 学习(一)io_service的基础
原文 http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio/ 编译环境 b ...
- boost asio 学习(九) boost::asio 网络封装
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=10 9. A ...
- boost asio 学习(八) 网络基础 二进制写发送和接收
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=9 8. Net ...
- boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...
- boost asio 学习(六) 定时器
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=7 6 定时器 ...
- BOOST ASIO 学习专贴
本文已于20170903更新完毕,所有boost asio 代码均为本人手抄.编译器为vs2013,并且所有代码已经上传,本文下方可下载源码 为了学习boost asio库,我是从boost的官方bo ...
- boost asio 学习(五) 错误处理
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Erro ...
- boost asio 学习(四)使用strand将任务排序
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=5 4. Seri ...
- boost asio 学习(三)post与dispatch
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=4 本章节为io_ ...
随机推荐
- Python中*args和**kwargs
*args *args是可变的positional arguments列表 *args:将参数打包成元组(tuple)给函数调用 在函数中用 args 调用 **kwargs **kwargs是可变的 ...
- 【java】设计模式-单例设计模式
单例设计模式:解决一个类在内存中是存在一个对象的问题.当需要该事物的对象在内存中唯一时,将以下三步添加即可. 思想:想要保证对象唯一1.为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象2 ...
- powershell中设置变量并启动Tomcat
假设tomcat安装在 C:\GreenSoftware\apache-tomcat-9.0.14 目录. 使用powershell进入到此目录.执行命令 $Env:JAVA_HOME="C ...
- caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)
[转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...
- The query below helps you to locate tables without a primary key:
SELECT tables.table_schema, tables.table_name, tables.table_rows FROM information_schema.tables LEFT ...
- pj2--图书管理系统
这一次做得是图书管理系统. 下面是功能框图 下面是流程图 实际在做这个项目的时候根据相应的实际情况对功能流程等等做了一些小小的改变. 下面是一些值得记一笔的地方. 1.借用系统自带的导航控件(Bind ...
- Zookeeper 在Windows下的安装过程及测试
安装jdk 安装Zookeeper. 在官网http://zookeeper.apache.org/下载zookeeper.我下载的是zookeeper-3.4.6版本. 解压zookeeper-3. ...
- css3兼容性检测工具
1. Modernizr 会在Modernizr 会在页面加载后立即检测特性:然后创建一个包含检测结果的 JavaScript 对象,同时在 html 元素加入方便你调整 CSS 的 class ...
- Python 爬虫 Vimeo视频下载链接
python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...
- leetCode21: 合并两个有序列表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...