安装

  • 下载-解压
  • 指定安装目录
    • ./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 学习的更多相关文章

  1. boost asio 学习(一)io_service的基础

    原文  http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio/ 编译环境 b ...

  2. boost asio 学习(九) boost::asio 网络封装

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=10 9. A ...

  3. boost asio 学习(八) 网络基础 二进制写发送和接收

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=9 8. Net ...

  4. boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...

  5. boost asio 学习(六) 定时器

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=7 6 定时器 ...

  6. BOOST ASIO 学习专贴

    本文已于20170903更新完毕,所有boost asio 代码均为本人手抄.编译器为vs2013,并且所有代码已经上传,本文下方可下载源码 为了学习boost asio库,我是从boost的官方bo ...

  7. boost asio 学习(五) 错误处理

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

  8. boost asio 学习(四)使用strand将任务排序

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

  9. boost asio 学习(三)post与dispatch

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=4 本章节为io_ ...

随机推荐

  1. 【java】设计模式-单例设计模式

    单例设计模式:解决一个类在内存中是存在一个对象的问题.当需要该事物的对象在内存中唯一时,将以下三步添加即可. 思想:想要保证对象唯一1.为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象2 ...

  2. 在Win10 Anaconda中安装Tensorflow

    有需要的朋友可以参考一下 1.安装Anaconda 下载:https://www.continuum.io/downloads,我用的是Python 3.5 下载完以后,安装.   安装完以后,打开A ...

  3. 彻底卸载Windows 10中OneDrive

    批处理来源网上. @rem OneDrive Complete uninstaller batch process for Windows 10. @rem Run as administrator ...

  4. java中的内部类详解

    https://www.cnblogs.com/dolphin0520/p/3811445.html https://www.cnblogs.com/chenssy/p/3388487.html

  5. node升级的正确方法

    本文主要是针对安装了node的用户如何对node进行升级或者安装指定版本:没有安装node的可以参考连接node安装方法 . 安装方法: 1.产看node版本,没安装的请先安装: $  node -v ...

  6. servlet-jsp-EL 表达式

    jsp--EL表达式 jsp表达式<%= %>用于向页面中输出一个对象.jsp2.0时在页面中不允许出现jsp表达式和脚本片段,于是使用EL表达式来代替jsp表达式,标签代替脚本片段 基本 ...

  7. servlet cdi analysis

    CDI中最令人兴奋的功能是允许每个人在Java EE平台中编写强大的扩展性功能,甚至于改变其核心本身.这些扩展性功能是可以完全移植到任何支持CDI的环境中. CDI的一些主要特性 1.类型安全:CDI ...

  8. sql server 数据库变成单用户模式的恢复

    USE master;GODECLARE @SQL VARCHAR(MAX);SET @SQL=''SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)FROM master. ...

  9. 刘志梅 201771010115 《面向对象程序设计(java)》 第八周学习总结

    实验六 接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 接口定义:接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义:由常量和一组抽象方法组成:接 ...

  10. 详解vue-cli脚手架项目-package.json

    该随笔收藏自: 详解vue-cli脚手架项目-package.json package.json是npm的配置文件,里面设定了脚本以及项目依赖的库. npm run dev 这样的命令就写在packa ...