在写一次epoll

Posted Elaine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在写一次epoll相关的知识,希望对你有一定的参考价值。

epoll & select & poll只能处理IO相关的操作,epoll每一个操作必须注册到时间监控机制中,并且还需要进程或者线程进行管理。

多进程/多线程 和epoll相比较

  epoll用在大量链接,少处理的项目中;

  多线程/多进程用在少量链接,复杂的业务处理。

 

在QQ中,处理登陆是epoll实现,因为epoll只能处理IO相关操作,所以epoll将登陆数据往后传送进程或线程做后续处理,并且把sql查询向数据库请求数据给数据库,并且高并发是在epoll端解决。

epoll比poll多了高速模式即(边缘触发)

 ppc/tpc(多进程/多线程)

  小号系统资源,连接数增多,系统的开销增大,每一个链接有一个独立的线程/进程,实时性,连接数不多 一般为几百个

select 

  采用轮询的方式 并且连接数在1024~2048之间,

epoll

  默认模式(水平触发)和poll差不多(除epoll监听的句柄多)连接数为几百万

水平触发:

  只要句柄文件有了动作,那么epoll就开始被占用。Nainx中的例子会将数据接受完全。

边缘触发:

  当数据接受完成时,epoll开始进行管理。nginx中的例子会将没接收完的数据在第二个数据到来时,接收。

 注:epoll进行管理的句柄增大,效率降低。epoll去掉了ppc/tpc对进程的封装。

以上是关于在写一次epoll的主要内容,如果未能解决你的问题,请参考以下文章

一次压力测试Bug排查-epoll使用避坑指南

日志组件优化报告

多读者多写者

快速排序递归

Stl标准库-Tuple

C++ - 最佳实践#define 只写一次的值?