高性能服务器、epoll惊群与lighttpd改良
来源:互联网 发布:3306端口怎么对外开放 编辑:程序博客网 时间:2024/05/16 02:15
关于高性能server,《unix网络编程》堪称经典。根据说明,有如下三种相对高效的模型:
模型1(最强)
一个进程中有预先创建多个线程都阻塞在accept函数(为了免accept惊群,可以在accept前先thread_lock),任何一个监听线程从accept返回得到一个socket就自己处理这个socket.
模型2
一个进程中有预先创建多个线程都阻塞在select(事件分配)函数,select有返回就调用accept。《unix网络编程》指出select会出现惊群,所以慢了。
模型3
预先创建多个线程,不过只有一个线程阻塞在accept即只有一个监听线程,这个线程得到socket以后把这个socket给一个空闲线程,用条件变量通知那个空闲进程。由于进程间通信的成本,所以效率比第一种低。
然而模型1并不能充分提高吞吐率,原因是子线程的处理变成了同步IO,一旦多用户把预先分配的多线程全占用了,悲剧了。所以要利用事件分配机制。
关于事件分配机制(学名:反应器)
目前已知的Linux反应器有select、poll、epoll。三者可以部分替换(可以参考lighttpd和Nginx,都对反应器封装了,还可以改运行配置来选择不同机制)
既然同属事件分配,神器epoll也应该有惊群问题,果然找到相关资料(http://bbs.chinaunix.net/thread-1091745-1-1.html)
那怎么办?
1鸵鸟算法:就用模型2(lighttpd就是)
2加锁:模型2,事件分配前加thread__lock
lighttpd看来效率是低了(就算用epoll)
肿么办?
根据http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4080488&highlight=,可以通过给子线程相同的eventpoll,而且如果升级了内核(具体2.6.多少不清楚,但linux3.0+肯定可以),内核已经避免epoll惊群了。所以说,有以下两条路
1升级新linux内核(又方便又可靠)。
2理论可以事件分配前加lock(lighttpd是多进程哦,锁成本高)
(话说为啥nginx还是比lighttpd高效,它可以用线程池,线程在内存共享方面有极大的优势)
- 高性能服务器、epoll惊群与lighttpd改良
- 高性能Web服务器 Lighttpd
- 高性能Web服务器 Lighttpd
- 高性能服务器(epoll精髓)
- 高性能服务器(epoll测试)
- 高性能服务器之epoll
- 谈epoll与高性能
- 高性能服务器(epoll exsample code)
- 高性能服务器编程之epoll
- lighttpd等web服务器中的epoll学习
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- epoll学习:思考一种高性能的服务器处理框架
- 使用epoll 在 linux 上开发高性能应用服务器
- epoll学习:思考一种高性能的服务器处理框架
- 使用epoll 在 linux 上开发高性能应用服务器
- epoll学习:思考一种高性能的服务器处理框架
- 高性能服务器(epoll c/s样列代码)
- PHP获得IP方式
- MyEclipse编码设置
- unity3D中控制摄像机的问题
- Himi浅谈游戏开发de自学历程!(仅供参考)
- Delphi DLL编写技巧
- 高性能服务器、epoll惊群与lighttpd改良
- 异常:Error: java.lang.IncompatibleClassChangeError: Implementing class
- EXT4.2.0 + common-fileipload1.3 + 大文件上传(可达到20G)
- PanoramaGL library类库详细解析
- c++ 中缓冲区的理解
- 零售版和批量授权版有什么区别?
- vs的几种调试方法
- Effictive C++學習(一)——概念問題
- Introduction to InnoDB(InnoDB存储引擎简介)