Libevent是一个轻量级、开源的网络库,与之相似的还有ACE(但是它比较庞大臃肿),Libev(可以说它是对Libevent的扩展,但是没有Libevent更稳定),当然还有Windows下非常强大的I/O完全端口(没有研究过),不过据说,最新的Libevent好像也可以支持完全端口哦。
下面直接上干货(针对最新的稳定的2.0.22版本)!
优点:
1、跨平台:支持Windos,Linux,Mac Os
2、支持各种I/O多路复用技术:select、poll、epoll、kqueue等(在不同的平台上都是选择最优的技术,比如在Windows下选择select,在Linux下选择epoll)。
{
这里顺带说一下,select跟epoll的一些区别
相同点:select跟epoll都是I/O多路复用技术,都可以用来实现高并发访问
不同点:
select:跨平台、采用轮询模式(也就是说每次有事件发生的时候都要进行遍历)、能监听的文件描述符受限于FD_SETSIZE,一般为1024,实现相对简单
epoll:只支持Linux,更加灵活,文件描述符不会受限制,使用一个文件描述符来管理多个文件描述符,将用户关系的文件描述符存放到内核的事件表中,这样从用户态到内核态只需要拷贝一次,不需要每次都进行遍历,但是实现相对复杂
使用场景:
绝大部分下我们都应该用epoll,因为epoll的优点导致它在大部分情况下都比select的效率更高,但如果我们是在局域网并且访问量不大的时候就可以使用select,这样select的效率反而会高,而且相对简单
<