1.兩者所用的驅動模式不同。
nginx使用的是epoll的非堵塞模式事件驅動。
apache使用的是select的堵塞模式事件驅動。
2.fastcgi和cgi的差别
當使用者請求web服務的時候。web會依據不同的需求将請求發送給不同個cgi來處理。
cgi模式,就是每次有請求的時候都fork一個新的程序來處理這個請求。處理完畢後再關閉這個程序。
fastcgi模式。就是在server啟動的時候依據配置檔案建立幾個cgi接口程序長駐在記憶體其中,當有請求連接配接的時候,cgi被激活來處理請求連接配接。處理完成後cgi程序也不會關閉。會再次等待下次的請求連接配接。
由于程序的建立和關閉須要占用非常大的記憶體和cpu資源。是以,相比較而言。處理多請求的情況下fastcgi模式的長處會不言而喻。
3.兩者的支援子產品
Apache支援的子產品非常多。并且也比較穩定。而nginx因為出現的比較晚,是以在這方面可能比不上Apache。
nginx本身就是一個反向代理server,并且支援7層負載均衡。
Apache的rewrit功能比nginx強大很多。
nginx是多線程的,而Apache是多程序的。
nginx是異步堵塞,而Apache是堵塞
nginx處理動态頁面非常雞肋,一般僅僅用與處理靜态頁面和反向代理。
Apache因為支援的子產品比較多。能夠支援比較多的動态頁面。并且性能比較穩定。
假設須要性能。就使用nginx。假設須要穩定。就使用Apache。
3.1.1 堵塞和非堵塞:
堵塞和非堵塞指的是運作一個操作是等操作結束再傳回,還是立即傳回。
比方餐館的服務員為使用者點菜,當實使用者點完菜後,服務員将菜單給背景廚師,此時有兩種方式:
- 第一種:就在出菜窗體等待,直到廚師炒完菜後将菜送到窗體,然後服務員再将菜送到使用者手中。
- 另外一種:等一會再到窗體來問廚師,某個菜好了沒?假設沒有先處理其它事情,等會再去問一次;
第一種就是堵塞方式。另外一種則是非堵塞的。
3.1.2 同步和異步:
同步和異步又是另外一個概念。它是事件本身的一個屬性。還拿前面點菜為例,服務員直接跟廚師打交道,菜出來沒出來,服務員直接指導,但僅僅有當廚師将菜送到服務員手上,這個過程才算正常完畢,這就是同步的事件。
相同是點菜,有些餐館有專門的傳菜人員。當廚師炒好菜後。傳菜員将菜送到傳菜窗體,并通知服務員,這就變成異步的了。事實上異步還能夠分為兩種:帶通知的和不帶通知的。前面說的那種屬于帶通知的。
有些傳菜員幹活可能主動性不是非常夠,不會主動通知你,你就須要時不時的去關注一下狀态。這樣的就是不帶通知的異步。
對于同步的事件。你僅僅能以堵塞的方式去做。而對于異步的事件。堵塞和非堵塞都是能夠的。
非堵塞又有兩種方式:主動查詢和被動接收消息。
被動不意味着一定不好。在這裡它恰恰是效率更高的,由于在主動查詢裡絕大部分的查詢是在做無用功。對于帶通知的異步事件,兩者皆可。
而對于不帶通知的,則僅僅能用主動查詢。
轉載于:https://www.cnblogs.com/mfmdaoyou/p/6911364.html