zoukankan      html  css  js  c++  java
  • boost.asio新框架的设计概念总结

    1.66版本,boost.asio库重新设计了框架,目前最新版为1.71。读了几天代码后,对框架中相关概念总结。因为是泛型编程的库,所以分析的概念层的设计。

    可通过boost官方文档,strand的1.65和1.66两版本文档比较,查证ts和io_context, executor首次出现在1.66。

    新框架有几个核心概念,Context,Scheduler,Service,Executor,Strand。

    Context:
    1, asio所有功能都必需在一个Context 里调度执行
    2, 每个Context 都有一个Service 注册表,管理Service
    3, 每个Context 下的Service 都是唯一的
    4, 每个Context 都有一个Scheduler
    5, Context 必须通过在线程运行poll()或run()进入调度消费Scheduler 执行队列并执行任务
    6, io_context是一种对io操作优先的优化Context,将io事件复路分集方法做成内嵌任务
    7, io_context的win版本对Schdeluer 进行了优化,聚合了iocp。
    8, 可以在多线程上同时运行poll()或run(),并且线程安全
    Scheduler:
    1, 首先是一个Context 的一个服务
    2, 有一条op_queue执行队列
    3, 所有Service 的调度都最终依赖Scheduler 调度
    4, Scheduler 的dispatch()方法将任务调度到执行队列
    Service:
    1, 为某种功能提供调度以及功能服务
    2, 最终依赖所在的 Context 的 Scheduler 调度服务
    3, 每种 Service 都有一个service_impl类,并为这个类提供服务
    Executor:
    1, 相当于ios中的可并行的dispatch_queue
    2, 相当于一个 Context 的服务,或者对 Context 的 Execution 行为的委托
    3, 最终依赖所在的ContextScheduler调度服务
    Strand:
    1, 相当于ios中的串行化的dispatch_queue
    2, 分两种服务,绑定本io Context 以及可以指定Executor (即不同类型的Context )
    3, 每个Strand 有独立的执行队列
    4, Strand 本身作为一个任务,必须在Scheduler 进行调度分派。
    5, 同一个Strand 同时只能在一条线程上分派执行队列
    6, 当多线程同时对Strand 分派时,其它线程只能将任务缓冲到等待队列
    7, 利用本身强制串行化的特性,可代替同步锁,保护变量和代码,减少线程切换

    下面是所有服务的依赖关系。Scheduler为核心服务,所有服务最终都会依赖Scheduler的服务,位于图正中间两个红色的类。

    补充 Service.4, 位于接口层的每个功能都有一个basic_前缀的类,每个接口对象与一个service_impl对象关联,并凭借service_impl对象向对应的Service获取得服务支持。

    接口层的功能分io与非io两类。io功能包括网络io,文件io以及串口io。非io功能包括定时器(timer),信号(signal)广播,以及媲美dispatch_queue的strand与executor。

    这些概念一般都会出现在模板参数,Executor模板参数可以应用Strand。希望本文可以帮助你去阅读新框架asio的代码。欢迎浏览http://www.cnblogs.com/bbqzsl的其他文章。

  • 相关阅读:
    [.NET]如何擷取部分網頁內容轉成圖片
    一些很有用的JS特效
    Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
    .NET获取客户端信息
    WAYOS 破解版三天重启最新解决办法,免重启程序
    MySQL 随机生成各种类型的随机函数
    Active Form显示标题栏及页面跳转
    wayos计费系统easyradius使用小记
    ROS中的智能QOS实现,效果应该是会比WAYOS好,而且更灵活
    以太网中的ARP和PPPOE
  • 原文地址:https://www.cnblogs.com/bbqzsl/p/11919502.html
Copyright © 2011-2022 走看看