天天看點

nginx和apache作為webserver的差别

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