91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx服務器的高性能原理IO復用介紹

發布時間:2021-08-31 09:36:45 來源:億速云 閱讀:174 作者:chen 欄目:服務器

這篇文章主要講解了“Nginx服務器的高性能原理IO復用介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx服務器的高性能原理IO復用介紹”吧!

導入

Nginx的處理IO的方式是異步非阻塞。Nginx之所以高性能除了異步非阻塞之外,還有一個核心的原因:IO復用。

什么是IO復用?

從最簡單的例子說起,一個請求連接來了之后,一般情況下是怎么處理請求的呢? 如圖1所示

Nginx服務器的高性能原理IO復用介紹

瀏覽器的每次請求都會分配或者新啟一個進程與之對應,去處理請求。進程上下文之間的切換和新啟進程都會很浪費資源,怎么優化呢?(舉手)把多進城變成多線程。  那么就有了如下圖2的優化結果。

Nginx服務器的高性能原理IO復用介紹

這么做有啥不好呢?在思考一下,線程是進程調度的最小單位,一個進程有多個線程在同時處理請求,那么如果這個進程因為異常情況意外終止了,那么它所擁有的所有的線程都將全部終止運行,換句話說,服務掛了。哈哈,好刺激。

那么IO復用派上用場了~~前面我們提到了異步非阻塞,那么我們這樣來設計,我們設計一個進程池、事件響應守護進程、請求服務進程。那么,我們的服務器的進程架構如下圖所示:

Nginx服務器的高性能原理IO復用介紹

如上圖,我們將服務器分成了三個模塊:

  1. 進程池

  2. 事件響應

  3. 事件注冊

當瀏覽器請求到達服務器之后,首先連接到(3)請求服務進程,并注冊一個事件,當請求發送數據的時候,這個時候會產生一個讀事件,這個時候會有(2)事件響應進程會響應,將事件交給(1)進程池處理,同時再注冊一個寫事件。當進程池將請求處理完成之后,會響應寫事件將處理的結果返回給瀏覽器。

那么IO復用所復用的是什么呢?

IO復用就是用一個進程來響應真實的請求事件。本質上復用的是進程。

Select與Epoll

當有讀寫事件發生了,事件守護進程響應交給進程池處理,同時再注冊一個寫事件,但是進程池怎么知道是哪個socket有事件發生了呢?所以每次有事件發生的時候,事件響應進程就會遍歷一下所有的socket連接句柄,判斷一下是否有事件發生,這種響應事件的方式就被稱為Select模型。

怎么去優化呢?如果每次有事件發生,如果能知道是確切的哪個socket連接的事件,效率就很高了,這樣方式就是Epoll模型。 舉個例子

  • 假如餐館有人要結賬,服務員就跟老板說一聲:“有人要結賬”,老板不知道是哪一桌要結賬,就需要挨個問一遍,這樣的方式就是select,時間復雜度O(n)。

  • 假如餐館有人要結賬,服務員就跟老板說一聲:“5號桌要結賬”,這樣的方式就是epoll,時間復雜度O(1)。

從大的方面了解一個高性能的服務器演化的過程,總結一下:池的概念會很大的提高性能,本次說到的是進程池,改成線程池(其實是多進程多線程模式)也是一樣。

感謝各位的閱讀,以上就是“Nginx服務器的高性能原理IO復用介紹”的內容了,經過本文的學習后,相信大家對Nginx服務器的高性能原理IO復用介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤壁市| 苏尼特左旗| 临洮县| 广州市| 红河县| 叙永县| 巴南区| 宣恩县| 循化| 安远县| 麦盖提县| 嵊泗县| 汶上县| 邢台县| 五莲县| 布尔津县| 金寨县| 称多县| 淳化县| 松原市| 潢川县| 信宜市| 沧源| 屏山县| 湖州市| 高唐县| 泽库县| 富平县| 若羌县| 宕昌县| 犍为县| 龙海市| 宜宾市| 漠河县| 信丰县| 宣武区| 开封县| 临泽县| 博爱县| 和政县| 舞阳县|