安装

  • 下载-解压
  • 指定安装目录
    • ./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() 方法

最新文章

  1. mui popover 自定义 弹出位置 显示 隐藏
  2. stm32cube--串口
  3. PowerDesigner 15.1 安装步骤详细图解及破解
  4. 异步post请求之Block方法
  5. PRML读书会第二章 Probability Distributions(贝塔-二项式、狄利克雷-多项式共轭、高斯分布、指数族等)
  6. hibernate缓存机制详细分析
  7. ios中XPath的语法
  8. linux定时器HZ和Jiffies
  9. 【技术贴】关闭CMD错误提示声音
  10. php 练习一 5月5日
  11. [Cocos2d-x v3.x]浅谈容器Vector
  12. vue-router跳转页面
  13. ubuntu14.04下手动安装eclipse
  14. Spring Boot Security 详解
  15. Java中反射的实现方式
  16. Stream初步应用
  17. 人工智能之一般合一算法Java实现之
  18. 如何用TFS build definition添加自动建立nuget package 步骤
  19. LayoutParams继承于Android.View.ViewGroup.LayoutParams(转)
  20. byte[]数组与十六进制字符串与字符串的互相转换 ——转载

热门文章

  1. socat管理haproxy以及haproxy调优
  2. 【转】C++中嵌入python程序——参数传递
  3. HTTP客户端/服务端 POST/GET
  4. js鼠标拖动(转载)
  5. 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ...ubuntu 18.04 安装vim遇到的错误
  6. Mybatis的mapper文件中#和$的区别 以及 resultType和resultMap的区别
  7. JavaScript学习-2循环
  8. Node Sass does not yet support your current environment解决办法
  9. mysql创建表和数据库
  10. week0713.5 newspaper 安装问题