卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

如果說nginx比Apache性能高是因?yàn)閚ginx用的c,那用匯編寫的性能豈不是更好?

網(wǎng)友解答: 快不快和語言關(guān)系不大,快的原因得益于nginx的epoll模型 apache是多線程或者多進(jìn)程,在工作的時候,當(dāng)來了一個http響應(yīng),一個進(jìn)程接收(listen)–識別處理

網(wǎng)友解答:

快不快和語言關(guān)系不大,快的原因得益于nginx的epoll模型 apache是多線程或者多進(jìn)程,在工作的時候,當(dāng)來了一個http響應(yīng),一個進(jìn)程接收(listen)–識別處理—返回請求,在此過程中,一個進(jìn)程全部處理,apche 對于套接字的I/O,讀或者寫,但是讀或者寫都是阻塞的,阻塞意味著進(jìn)程就得掛起進(jìn)入sleep狀態(tài),那么一旦連接數(shù)很多,Apache必然要生成更多的進(jìn)程來響應(yīng)請求,一旦進(jìn)程多了,CPU對于進(jìn)程的切換就頻繁了,很耗資源和時間,所以就導(dǎo)致apache性能下降了,說白了就是處理不過來這么多進(jìn)程了。

Nginx采用epoll模型,異步非阻塞。對于Nginx來說,把一個完整的連接請求處理都劃分成了事件,一個一個的事件。比如accept(), receive(),磁盤I/O,send()等,每部分都有相應(yīng)的模塊去處理,一個完整的請求可能是由幾百個模塊去處理。真正核心的就是事件收集和分發(fā)模塊,這就是管理所有模塊的核心。只有核心模塊的調(diào)度才能讓對應(yīng)的模塊占用CPU資源,從而處理請求。拿一個HTTP請求來說,首先在事件收集分發(fā)模塊注冊感興趣的監(jiān)聽事件,注冊好之后不阻塞直接返回,接下來就不需要再管了,等待有連接來了內(nèi)核會通知你(epoll的輪詢會告訴進(jìn)程),cpu就可以處理其他事情去了。一旦有請求來,那么對整個請求分配相應(yīng)的上下文(其實(shí)已經(jīng)預(yù)先分配好),這時候再注冊新的感興趣的事件(read函數(shù)),同樣客戶端數(shù)據(jù)來了內(nèi)核會自動通知進(jìn)程可以去讀數(shù)據(jù)了,讀了數(shù)據(jù)之后就是解析,解析完后去磁盤找資源(I/O),一旦I/O完成會通知進(jìn)程,進(jìn)程開始給客戶端發(fā)回數(shù)據(jù)send(),這時候也不是阻塞的,調(diào)用后就等內(nèi)核發(fā)回通知發(fā)送的結(jié)果就行。整個下來把一個請求分成了很多個階段,每個階段都到很多模塊去注冊,然后處理,都是異步非阻塞。異步這里指的就是做一個事情,不需要等返回結(jié)果,做好了會自動通知你。

標(biāo)簽: