为何Boost的asio要使用proactor模式实现?

news/2024/7/9 19:27:27 标签: c/c++, epoll, python

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Linux下高性能的网络库中大多使用的Reactor 模式去实现,Boost Asio在Linux下用epoll和select去模拟proactor模式,影响了它的效率和实现复杂度,
看陈硕的自己的Linux下Reactor网络库和ASIO的性能对比,大概比asio性能(吞吐量)高1/5.既然Linux下网络库用Reactor性能才高,为什么Boost ASIO Linux下要用模拟的Proactor模式?
或者说为什么ASIO不在win和linux都用Reactor模式?这样的选择是不是可以性能更好?和更加适应市场?服务器端毕竟大量都是Linux.

 

Windows 下很难实现高效可伸缩的 Reactor。首先,Win32 API 里 WaitForMultipleObjects 只能同时等待 64 个 handle (MAXIMUM_WAIT_OBJECTS);其次 WinSock 的 select() 实现又很 buggy,特别是在错误处理方面有很多奇葩行为(具体见各种跨平台网络库代码中对此的注释);最后,Windows Vista 新增的 WSAPoll() 函数与 POSIX 的 poll() 又不尽兼容。

Windows 有自己的一套高效异步IO模型(几乎等同于Proactor),同时支持文件IO和网络IO;但 Linux 只有高效的网络同步IO(epoll 之类的 io multiplexing 是同步的Reactor,且不支持磁盘文件),二者的高效IO编程模型从根本上不兼容(Windows 可以把网络事件发到 GUI 线程的事件队列中,有点类似 Reactor,但是似乎一个进程只能有一个 GUI 线程,因此在多核系统上其伸缩性受限)。

因此,ASIO 要想高效且跨平台,只能用 Proactor 模型了。不可避免地会在 Linux 上损失一点儿效率。

 

转载于:https://my.oschina.net/zhangjie830621/blog/353728


http://www.niftyadmin.cn/n/851183.html

相关文章

通过给定的文件流,判断文件的编码类型

1 /// <summary>2 /// 通过给定的文件流&#xff0c;判断文件的编码类型3 /// </summary>4 /// <param name"fs">文件流</param>5 /// <returns>文件的编码类型</returns>6 public sta…

Visual Studio 2010——C#中的类

实验环境&#xff1a;Windows XP&#xff0c;Visual Studio 2010 Ultimate 1 创建项目&#xff1a; 文件>>新建>>项目&#xff0c;选中“控制台应用程序”。如下图所示&#xff1a; 2 添加以下代码&#xff1a; using System; using System.Collections.Generic; …

SUSE中LVM的使用心得

一、服务器分区规划(按100个商务群规划&#xff0c;可扩展) myvg卷组容量&#xff0d;&#xff0d;700G(硬盘空间的80%左右) /boot 100M 用于系统启用需要的空间 / 20G 用于放置一些系统用户文件 /usr 150G    用于tomcat&#xff1a;发布程序…

mysql upte_MySQL中ROLLUP的替代方法

今天从MySQL中提取数据&#xff0c;使用ROLLUP统计后&#xff0c;想在数据左边列中加入项目名称&#xff0c;使用SQLSELECT (CASE WHEN ISNULL(PLAYERNO) THEN PLAYERNOTOTAL ELSE PLAYERNO END) AS PLAYERNO,SUM(AMOUNT) FROM penaltiesGROUP BY PLAYERNO WITH ROLLUP结果是&a…

4.3 单元初始化与结束化

4.3.1单元初始化与结束化的内部例程 Delphi会初始化每一个单元&#xff0c;单元结束化则是初始化的逆过程。它们对应于System.&#xff0c;pas中的两个内部例程&#xff1a; procedure InitUnits&#xff1b; procedure FinalizeUnits&#xff1b; 编译器会采用深度优先遍历算法…

1575 二叉苹果树

1575 二叉苹果树 给定需要保留的树枝数量&#xff0c;求最多能留住多少苹果&#xff0c;是一个动态规划&#xff0c;并且是一个树形动态规划 个人感觉有点像贪心&#xff0c;不过没关系&#xff0c;因为动态规划的题第一眼都容易看成贪心 我们发现一个性质&#xff0c;那就是对…

接口测试用例设计思路_接口测试初探(流程,文档,工具,技术)

什么是接口测试接口测试是目前测试的主流手段之一&#xff0c;采用接口测试有很多优点&#xff1a;提高测试效率&#xff1a;可通过自动化手段实现重复验证&#xff0c;也可以在依赖服务没有开发完成时优先测试部分服务方便定位Bug&#xff1a;通过接口的抓包和分析&#xff0c…

吐槽苹果的革新 iOS 7

昨天苹果发布了全新操作系统iOS 7&#xff0c;苹果的革新让所有人都眼前一亮&#xff0c;由于新系统加入了大量的3D效果&#xff0c;加之部分功能全部采用了悬浮式半透明结构设计&#xff0c;这让iOS 7看起来既有科技感&#xff0c;又很清新。(*^__^*)女孩纸的最爱&#xff01;…