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