最近在网络底层的开发,对于吞吐有一定要求,借机会,也了解了下业内常用的网络库
libevent
优点:
- 事件驱动,性能好
- 轻量级,只做网络
- 代码可读性好
- 支持跨平台(win&linux&mac)
- 支持io多路复用(epoll、poll、select、kqueue)
- 支持定时器、信号等事件
- 可注册事件优先级
libev
继承了libevent的优点,也改善了很多libevent中的问题。如:
- 在libevent中,使用了很多全局变量,导致在多线程环境中不安全;
- libevent中的事件event的数据结构囊括内容太多,包含了io、时间、信号处理,导致结构对象很大
- 插件实现的质量不太好
- 计时器计时不精确
在libev中对这些问题,进行了极大的改善。
libuv
由于libevent和libev对Windows平台支持性较差(不支持完全端口iocp),所以,libuv出现了。
libuv是基于libev,,并在win平台上封装了iocp。
所以根据当前的业务是有在win平台的部分,所以选择了libuv。