這得益於Nginx使用了最新的epoll(Linux 2.6核心)和kqueue(freebsd)網路I/O模型,而Apache則使用的是傳統的select模型。 (建議學習:nginx教學)
目前Linux下能夠承受高並發存取的Squid、Memcached都採用的是epoll網路I/O模式。
處理大量的連接的讀寫,Apache所採用的select網路I/O模型非常低效。
下面用一個比喻來解析Apache所採用的select模型和Nginx所採用的epoll模型進行之間的差異:
假設你在大學讀書,住的宿舍大樓有很多房間,你的朋友要來找你。
select版宿管大媽就會帶著你的朋友挨個房間去找,直到找到你為止。
而epoll版宿管大媽會先記下每位同學的房間號,你的朋友來時,只需告訴你的朋友你住在哪個房間即可,不用親自帶著你的朋友滿大樓找人。
如果來了10000個人,都要找自己住這棟樓的同學時,select版和epoll版宿管大媽,誰的效率更高,不言自明。
同理,在高並發伺服器中,輪詢I/O是最耗時的操作之一,select和epoll的效能誰的效能更高,同樣十分明了。
以上是apache和nginx效能差很多嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!