1.nginx高並發原理(多進程+epool實現高並發)
1.Nginx 在啟動后,會有一個 master 進程和多個相互獨立的 worker 進程
2.每個子進程只有一個線程,采用的 IO多路復用模型epoll,實現高並發
2.epoll能實現高並發原理
1.epoll() 中內核則維護一個鏈表,epoll_wait 方法可以獲取到鏈表長度,不為0就知道文件描述符准備好了
2.在內核實現中 epoll 是根據每個 sockfd 上面的與設備驅動程序建立起來的回調函數實現的
3.某個 sockfd 上的事件發生時,與它對應的回調函數就會被調用,來把這個 sockfd 加入鏈表,其他處於“空閑的”狀態的則不會
4.epoll上面鏈表中獲取文件描述,這里使用內存映射(mmap)技術, 避免了復制大量文件描述符帶來的開銷
內存映射(mmap):內存映射文件,是由一個文件到一塊內存的映射,將不必再對文件執行I/O操作
3、nginx和apache比較
(1)nginx相對於apache的優點
1.輕量級,同樣起web 服務,比apache 占用更少的內存及資源
2.抗並發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高並發下nginx 能保持低資源低消耗高性能
3.高度模塊化的設計,編寫模塊相對簡單,社區活躍,各種高性能模塊出品迅速啊
(1)apache相對於nginx的優點
1.apache 更為成熟,少 bug ,穩定性好
2.rewrite ,比nginx 的rewrite 強大
3.模塊超多,基本想到的都可以找到