libevent核心:
1.事件驱动
2.同步非阻塞
libevent好处:
1. 事件驱动,高性能
2. 轻量级,专注于网络,不如ACE那么臃肿庞大
3. 跨平台,支持windows和linux
4. 支持多种I/O多路复用技术, epoll,poll,dev/poll,select,和kqueue
5. 支持 I/O,定时器和信号等事件
关于libevent, 我个人的描述:
libevent的两个核心特点是 事件驱动 和 同步非阻塞的io实现方式。
事件驱动,也就是epoll或iocp的方式,避免了套接字(FD)集合在用户区和内核区的来回拷贝 和 避免了频繁遍历套接字集合的低效率的操作,只需要去处理已经就绪的套接字,所以效率高。 以及它把信号和定时器的处理也统一成事件了,所以使用起来更稳定。
同步非阻塞(linux epoll),其中非阻塞就是程序用户态下不会阻塞在一个套接字(FD)上,可以多路复用;同步,就是读写IO数据时,用户态要等待内核态完成,才能继续下面的操作。这是为了实现简单和不同的操作系统下更通用。
windows下用的是iocp,它是异步IO,程序内核态可以并发执行IO操作,效率更高。
libevent还支持多线程,虽然它本身不是线程安全,但只要保证各个线程独自操作自己的事件列表(event_base)就可以了。
实现细节方面,它提供了bufferevent的类来帮助更方便的操作字符串,屏蔽了很多细节。
libevent不支持UDP。
参考资料:
1. https://www.cnblogs.com/lfsblack/p/5498556.html
2. https://www.cnblogs.com/me115/p/4452801.html
3. https://www.cnblogs.com/Anker/p/3265058.html