ACE:
参考:https://blog.csdn.net/solstice/article/details/5364096 注:篇博文的作者是陈硕,正是下面介绍的muduo项目的作者。
BOOST.ASIO:Proactor模型
网址:http://think-async.com/Asio
中文网址:https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chinese/content/
优点:跨平台,支持回调函数组合,封装成一个对外的异步调用。可以实现Zero-copy。和线程解耦,长时间执行的过程,总是有系统异步完成,程序无需为此新建线程。
缺点:内存占用比较大,相对于Reactor模式,需要先分配内存,后处理IO,Reactor是先等待IO,后分配内存,因此,Proactor有Zero-copy,内存已经分配好,系统可以直接将接收的网络数据从网络接口转给应用程序内存,而不需要中转内存。
ASIO的内核是io_service脱胎于IO,是宇宙级异步模型,共有三步:
1。发起 按照 asio 的编码规范,所有的发起操作都使用 async_ 前缀,使用 async_动词 的形式作为函数名。
2。执行 异步过程在发起的时候被executor执行(系统可以是支持 AIO 的内核,不支持 AIO 的系统则是 aiso 用户层模拟)
3。完成并回调 在发起 async_* 操作的时候,总是携带一个回调的闭包。asio使用闭包作为异步事件完成的处理回调,没而不是C式的回调函数。asio的宇宙异步模型里,回调总是在执行 io_service::run 的线程里执行。asio绝不会在内部线程里调用回调。
参考:https://blog.csdn.net/wojiuguowei/article/details/78838706
Muduo:Reactor模型。
项目地址:https://github.com/chenshuo/muduo
基于事件的非阻塞网络库。这个库只是针对linux平台的。适合初学者。
目前的实例有很多:360的开源网络项目就是深度参考Muduo。
参考:https://blog.csdn.net/solstice/article/category/779646 注:项目作者本人的CSDN
参考书籍:《Linux多线程服务端编程:使用muduo C++网络库》
Libevent:
项目地址:http://libevent.org/
C语言编写的轻量级事件驱动开源网络库。支持Linux,Windows,Mac OS。
参考:https://www.cnblogs.com/nearmeng/p/4043548.html
目前的项目实例:memcached
Libev
相对于libevent而言,更简练,性能更好,window支持不好。
Libuv
项目地址:http://docs.libuv.org/en/v1.x/
高性能,事件驱动的IO库。是对libev的封装,使之能支持windows。linux系统下使用libev,window系统下使用IOCP
项目实例:node.js
以上三个类库的比较参考:https://blog.csdn.net/lijinqi1987/article/details/71214974
LibCurl
项目地址:https://curl.haxx.se/libcurl/
免费的轻量级的客户端网络库。
参考:https://www.cnblogs.com/nanzhi/p/8492288.html