第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Netty 教程 Netty 教程 Netty Reactor 模型之多線程模型

Netty Reactor 模型之多線程模型

1. 前言

回顧上節(jié),我們了解了什么是傳統(tǒng)堵塞 I/O 模型,什么是單 Reactor 單線程模型,以及它們的缺點,本節(jié)內(nèi)容主要是針對單 Reactor 單線程模型的缺點進(jìn)行升級,讓它的性能得到進(jìn)一步的提高。

2. 如何進(jìn)行優(yōu)化

首先,我們思考一下單 Reactor 單線程的性能瓶頸在哪里?

主要有以下兩個方面的性能上的缺點:

  1. 整個流程處理都是單線程,包括:監(jiān)聽客戶端連接、分發(fā)客戶端請求、處理客戶端請求及響應(yīng),整個流程非常的復(fù)雜和耗時,只有一個線程的話,如果客戶端數(shù)量比較多,那么將處理不過來;

  2. 客戶端的監(jiān)聽、請求分發(fā)和業(yè)務(wù)處理耦合一起,業(yè)務(wù)處理將是一個未知的東西,如果這個業(yè)務(wù)很復(fù)雜需要連接數(shù)據(jù)庫,并且操作好幾張表,那么可能將會耗時相對的長,那么將會影響其他的客戶端請求。

針對單 Reactor 單線程的兩個缺點,本節(jié)我們主要針對第二個缺點來進(jìn)行改造,其實一般提到線程模型的概念,一般都喜歡結(jié)合生活當(dāng)中的飯店經(jīng)營模式這個俗套來進(jìn)行說明,可以加深同學(xué)們的印象。

  1. 單 Reactor 單線程模型: 好比一個小飯館,老板既要招待客人又要炒菜,老板服務(wù)效率既然很低,掙的錢既然不會太多;

  2. 單 Reactor 多線程模型: 老板專門招待客人,并且把客人的點菜傳達(dá)給后廚,后廚有多個廚師負(fù)責(zé)炒菜,這樣的話,炒菜的速度既然提高,客人也會覺得滿意;

  3. 主從多線程模式: 雖然有多個廚師負(fù)責(zé)炒菜,但是前臺只要一個人在忙活,即使后廚炒菜速度很快,那么給客戶上菜的效率也會受到影響,如果客戶爆滿的話,服務(wù)員只能累死的份了,那怎么辦呢?增加服務(wù)員的人數(shù)不就解決問題了。

3. 單 Reactor 多線程模型

圖片描述

架構(gòu)圖說明:

  1. Reactor 通過 Select 監(jiān)聽客戶端請求事件,受到事件之后它本身不負(fù)責(zé)處理,而是把事件轉(zhuǎn)發(fā)出去;

  2. 如果是建立連接請求,則由 Acceptor 進(jìn)行處理;

  3. 如果不是建立連接請求,則轉(zhuǎn)發(fā)給 Handler 負(fù)責(zé)處理;

  4. Handler 也不負(fù)責(zé)處理具體的業(yè)務(wù),而是通過 read () 方法讀取數(shù)據(jù),然后再次分發(fā)給線程池去進(jìn)行處理;

  5. 線程池會分配一個子線程去處理具體的業(yè)務(wù),處理完成之后把結(jié)果返回給 Handler,并釋放連接給連接池。

模式的優(yōu)點:

  1. 可以充分的利用多核 CPU 的資源,提高處理任務(wù)的性能;

  2. 把業(yè)務(wù)處理從整個模型中剝離并丟給線程池去處理,避免某個業(yè)務(wù)處理或者某次業(yè)務(wù)處理太慢導(dǎo)致其他業(yè)務(wù)處理受到影響;

  3. 相比傳統(tǒng) I/O 堵塞模型,如果一旦沒有客戶端發(fā)起請求,那么線程池將不會處于堵塞狀態(tài),而是釋放并且可以處理其他的業(yè)務(wù),對于性能調(diào)優(yōu)來說,最寶貴的就是線程資源,一旦線程資源得不到釋放,整個應(yīng)用將會卡掉。

模式的缺點:

  1. 多線程之間的數(shù)據(jù)共享和訪問比較復(fù)雜,比如:Handler 給 Worker 線程分發(fā)數(shù)據(jù);

  2. Reactor 處理所有事件的監(jiān)聽、轉(zhuǎn)發(fā)、響應(yīng),都是單線程,在高并發(fā)的情況下,負(fù)責(zé)處理業(yè)務(wù)的 Worker 可能正常,但是 Reactor 就會容易遇到性能瓶頸;

  3. Reactor 如果一旦出現(xiàn)故障,那么整個通訊就會故障。

通過以上的分析,其實也是不推薦使用這種模式,除非客戶端數(shù)量比較少,類似局域網(wǎng)內(nèi)部的項目,但是我們還是需要了解整個模型是如何演變過來的,而不是一上來就講解最好的那個方案。只有把整個演變過程了解了,我們才能更好的了解整個線程模型可能存在的性能瓶頸在哪里。

4. 小結(jié)

本節(jié)核心掌握的知識點

  1. 了解單 Reactor 單線程的弊端在哪里;

  2. 通過線程池的方式去解決單 Reactor 單線程存在的缺點;

  3. 通過飯館經(jīng)營的案例來講解幾種 Reactor 線程模型的概念,讓大家更加容易理解;

  4. 介紹了什么是單 Reactor 多線程模型,以及它的優(yōu)缺點是什么。