关于nginx/lighttpd epoll高并发以及apache为何不采用epoll的的疑惑 不指定
生活随笔
收集整理的這篇文章主要介紹了
关于nginx/lighttpd epoll高并发以及apache为何不采用epoll的的疑惑 不指定
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
關(guān)于nginx/lighttpd epoll高并發(fā)以及apache為何不采用epoll的的疑惑 - 向東博客 專注WEB應(yīng)用 構(gòu)架之美 --- 構(gòu)架之美,在于盡態(tài)極妍 | 應(yīng)用之美,在于藥到病除 - Life is Short,Play it More,So Playin' with IT,Focus on Killer Application,Marketing Meets Technology.︻┳═一 Ζ〧φ﹀ヘ -
關(guān)于nginx/lighttpd epoll高并發(fā)以及apache為何不采用epoll的的疑惑
WEB2.0 root 2010-3-13 17:24 評論(0) 閱讀(2051) 大 | 中 | 小 引用地址:注意: 該地址僅在今日23:59:59之前有效WEB2.0 | 評論(0) | 引用(0) | 閱讀(2051)ginx/lighttpd等web server 采用epoll+單進(jìn)程模式能支持并發(fā)幾w的并發(fā)。但有個問題一直沒搞明白,如果單進(jìn)程的話,來個請求肯定得read/write操作吧,如果get數(shù)據(jù)很大的話(如sleep 1000),單進(jìn)程服務(wù)串行處理請求還不得嚴(yán)重阻塞啊?? ,請大牛們解惑?? ;對于apache進(jìn)程+線程池的并發(fā)處理就比較好理解
而且epoll模式是非阻塞的,應(yīng)該不會存在sleep 1000什么的.問題可能存在于處理數(shù)據(jù)的效率上吧...可以考慮分離吧使用非阻塞模式做I/O操作需檢查errno是不是EAGAIN、EWOULDBLOCK、EINTR,如果是就需要循環(huán)重讀,也就非阻塞處理IO時間與阻塞是一樣,只是非阻塞能立即返回而且,你得人工去重復(fù)處理數(shù)據(jù),還是需要等很長時間
單線程epoll ET,處理幾萬個并發(fā)連接是小case,LT模式都能處理上萬并發(fā)連接,只是LT時CPU占用是居高不下。
單線程但并不是單線程啊! nginx 多線程的, 底下真正做事時還是一個線程伺候一個client的, 但accept()是在主線程統(tǒng)一處理的 ...
nginx/lighttpd之類只是取巧于各種常用web應(yīng)用的多數(shù)情況, 如果您用nginx,lighttpd的web服務(wù)器處理論壇等高度發(fā), 高復(fù)雜的業(yè)務(wù)時, 它們也沒什么優(yōu)勢的, 甚至不如apache
如果這樣的話,nginx還是會用到類似線程池技術(shù)羅????之前粗略看了看lighttpd源碼結(jié)構(gòu),沒有用到線程池,一般情況是單進(jìn)程,考慮多CPU情況也可以fork幾個worker進(jìn)程,但不像apache好幾百的進(jìn)程擺在那
ighttpd和nginx采用異步服務(wù)器模式,epoll模式,為何apache不采用這個模式,可以提高并發(fā)性能?
個人理解:
1. apache的模塊大都是采用select模式開發(fā),換到epoll模式不容易?
2. 跨平臺問題,epoll模式只在linux2.6內(nèi)核上有,其他平臺無法實(shí)現(xiàn),那么可以搞個支持epoll模式的apache新版本,叫apache3.0也可以啊
3.對于apache模塊話其實(shí)沒有必要去學(xué)習(xí)epool,相對php處理一些復(fù)雜的邏輯運(yùn)算可能穩(wěn)定性會比nginx更好更穩(wěn)定(我自己加的一條)
但是apache有很多模塊是阻塞方式運(yùn)行的,所以需要每個請求開啟一個線程/進(jìn)程,這跟worker沒什么區(qū)別。線程/進(jìn)程之間切換時要一定代價的,另外也并不能發(fā)揮event非阻塞的優(yōu)勢。
我覺得,apache本身的線程模式與event非阻塞方式是有沖突的。再加上現(xiàn)有很多apache模塊是用阻塞方式來寫的,所以我覺得要完全移植很難。
如果樓主一定要用的話,建議還是用lighttpd或nginx吧,apache現(xiàn)在主要還是定位于功能強(qiáng)大的后端服務(wù)器。
前幾天用apache-2.2.11的event模式和nginx-0.7.30的epoll模式做了下簡單對比??同樣7萬個連接 apache只撐了大概15分鐘后就已經(jīng)不能提供服務(wù)了 在前15分鐘能訪問到后端的連接數(shù)也很少 相比使用nginx頂7萬個連接 在系統(tǒng)負(fù)載和cpu消耗上nginx都占有優(yōu)勢 至少我用nginx來跑7萬并發(fā)的靜態(tài)圖片到現(xiàn)在還沒掛過 不錯 呵呵 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的关于nginx/lighttpd epoll高并发以及apache为何不采用epoll的的疑惑 不指定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu无线网络开关
- 下一篇: 【C#每日一贴】ArrayList 转换