安装

  • 下载-解压
  • 指定安装目录
    • ./bootstrap.sh --prefix=/usr/local/boost_1_68_0
  • 查看所有必须要编译才能使用的库
    • ./b2 --show-libraries
  • 其他编译选项
    • ./b2 --help
    • ./b2 -j 20
    • 只编译安装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() 方法

转载于:https://www.cnblogs.com/wangzhiyi/p/9539650.html

boost::asio 学习相关推荐

  1. Boost asio学习笔记之一—— 使用strand支持多线程调用service_io的方法

    asio是一个跨平台的网络库,可以作为boost的一部分,也可以使用独立的asio部分.这里记录学习的笔记,作为参考. 感觉asio的关键就是io_service对象.所有的异步同步都跟这个有关.多线 ...

  2. Boost asio学习笔记之二—— 网络编程

    boost库中的网络编程的例子比较复杂,不太好理解,所以,从网上找了一个简单点的例子.网址如下:http://blog.chinaunix.net/u3/93184/showart_1846119.h ...

  3. boost.asio学习-----reslover 域名解析

    将域名解析为ip地址并输出: 1 #include "stdafx.h" 2 #include "boost/asio.hpp" 3 #include < ...

  4. boost asio 学习

    本章节为io_service添加任务,并且区分dispatch与post的区别.如果说io_service是asio库的大脑,那么post与dispatch就是asio库的手和脚. #include ...

  5. boost.asio学习

    https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chinese/content/Chapter1.html 转载于:http ...

  6. boost asio io_service学习笔记

    转自:http://hi.baidu.com/jrckkyy/blog/item/e86835d61e60722506088b6a.html 构造函数 构造函数的主要动作就是调用CreateIoCom ...

  7. boost.asio mysql_boost asio学习笔记

    1: 发现一个很诡异的问题: #include #include #include #include using namespace std; void print(const boost::syst ...

  8. asio boost 异步错误处理_boost asio 学习(五) 错误处理

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Erro ...

  9. boost库学习④:boost::asio::buffer

    asio::buffer常用的构造方法 字符数组 char d1[128]; size_t bytes_transferred = socket.receive(boost::asio::buffer ...

  10. Boost asio 定时器

    Boost asio入门学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载.文章中有连接失效或是技术谬误的地方,请与我联系. https://blog.csdn.net/luchengtao ...

最新文章

  1. 漫谈天际网的用户体验
  2. 个人对北理工2020级硕士研究生张××一篇学术论文涉嫌抄袭的看法
  3. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】
  4. node nightmare 网页自动化测试 sample
  5. 使用SAP WebIDE给SAP UI5应用添加data source
  6. r语言 计算模型的rmse_直播丨R语言与作物模型高级应用实战技术应用
  7. 禁止选中页面内容-兼容ie、firefox、chrome
  8. Spring事务传播实验剖析(一)
  9. 快速实现python c扩展模块
  10. 全网首发:org.xml.sax.SAXNotRecognizedException: unrecognized features nonvalidating/load-external-dtd
  11. PHP使用缓存生成静态页面
  12. 电路设计中发光二极管用作指示灯时的限流电阻如何选择
  13. java计算某天到当前时间的间隔天数
  14. 超酷炫技:10 个牛逼的单行代码编程技巧
  15. 【编译系统】什么是PL/0和类Pcode虚拟机
  16. linux下输入ls显示时间格式,【Linux基础】linux下修改ls显示的时间格式
  17. Intel第十代CPU集成显卡不再支持 Legacy启动 (i5-10400...)
  18. 计算机键盘重复,win10系统电脑键盘打字时总是出现重复字符的还原方法
  19. 苹果5s农历显示订阅服务器,苹果5s怎么显示农历,苹果5S怎样设置阴历呢?
  20. java 自动论坛评论,Java论坛系统巡云轻论坛

热门文章

  1. 解锁图案-九宫格有多少种组合?安全吗?用程序来解答
  2. 大数据开发有哪些难点?
  3. 罗老师算法竞赛专题解析
  4. Win10系统下CMD命令提示符输入ipconfig命令无法使用的解决方法
  5. 物联网芯片的协议之WLAN及其调制
  6. 线性空间 android 变黑,Unity手游开发札记——Unity线性空间下移动设备上烘焙变暗问题处理笔记...
  7. 如何批量注册域名?批量注册域名流程是什么
  8. Delphi 仿QQ皮肤控件设计与运行效果图
  9. Photoshop 2023 支持 M1 Mac下载
  10. hc05刷hid固件_Arduino使用HC05蓝牙模块与手机连接