浅谈Reactor 线程模型
Reactor 的線程模型有三種:單線程模型、多線程模型、主從多線程模型。首先來(lái)看一下單線程模型,如下圖所示:
所謂單線程, 即Acceptor 處理和andler 處理都在同一個(gè)線程中處理。這個(gè)模型的壞處顯而易見(jiàn):當(dāng)其中某個(gè)Handler阻塞時(shí), 會(huì)導(dǎo)致其他所有的Client 的Handler 都得不到執(zhí)行,并且更嚴(yán)重的是,Handler 的阻塞也會(huì)導(dǎo)致整個(gè)服務(wù)不能接收新的Client 請(qǐng)求(因?yàn)锳cceptor 也被阻塞了)。因?yàn)橛羞@么多的缺陷,因此單線程Reactor 模型應(yīng)用場(chǎng)景比較少。
那么,什么是多線程模型呢? Reactor 的多線程模型與單線程模型的區(qū)別就是Acceptor 是一個(gè)單獨(dú)的線程處理,并且有一組特定的NIO 線程來(lái)負(fù)責(zé)各個(gè)客戶端連接的IO 操作。Reactor 多線程模型如下圖所示:
Reactor 多線程模型有如下特點(diǎn):
1、有專門(mén)一個(gè)線程,即Acceptor 線程用于監(jiān)聽(tīng)客戶端的TCP 連接請(qǐng)求。
2、客戶端連接的IO 操作都由一個(gè)特定的NIO 線程池負(fù)責(zé).每個(gè)客戶端連接都與一個(gè)特定的NIO 線程綁定,因此在這個(gè)客戶端連接中的所有IO 操作都是在同一個(gè)線程中完成的。
3、客戶端連接有很多,但是NIO 線程數(shù)是比較少的,因此一個(gè)NIO 線程可以同時(shí)綁定到多個(gè)客戶端連接中。
接下來(lái)我們?cè)賮?lái)看一下Reactor 的主從多線程模型。一般情況下, Reactor 的多線程模式已經(jīng)可以很好的工作了,但是我們想象一個(gè)這樣的場(chǎng)景:如果我們的服務(wù)器需要同時(shí)處理大量的客戶端連接請(qǐng)求或我們需要在客戶端連接時(shí),進(jìn)行一些權(quán)限的校驗(yàn),那么單線程的Acceptor 很有可能就處理不過(guò)來(lái),造成了大量的客戶端不能連接到服務(wù)器。
Reactor 的主從多線程模型就是在這樣的情況下提出來(lái)的,它的特點(diǎn)是:服務(wù)器端接收客戶端的連接請(qǐng)求不再是一個(gè)線程,而是由一個(gè)獨(dú)立的線程池組成。其線程模型如下圖所示:
可以看到,Reactor 的主從多線程模型和Reactor 多線程模型很類似,只不過(guò)Reactor 的主從多線程模型的Acceptor使用了線程池來(lái)處理大量的客戶端請(qǐng)求。
?
總結(jié)
以上是生活随笔為你收集整理的浅谈Reactor 线程模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: EventLoopGroup 与Reac
- 下一篇: EventLoopGroup 与Reac