Reactor
反應(yīng)器設(shè)計模式(Reactor pattern)是一種為處理并發(fā)服務(wù)請求辐怕,并將請求提交到一個或者多個服務(wù)處理程序的事件設(shè)計模式塞帐。當(dāng)客戶端請求抵達后,服務(wù)處理程序使用多路分配策略飞蛹,由一個非阻塞的線程來接收所有的請求姑尺,然后派發(fā)這些請求至相關(guān)的工作線程進行處理。
傳統(tǒng)的并發(fā)處理
傳統(tǒng)的網(wǎng)絡(luò)請求并發(fā)處理是為每一個socket開啟一個線程
該模式的缺點顯而易見:
1并蝗、當(dāng)請求比較多時祭犯,系統(tǒng)的性能會下降,因為創(chuàng)建和回收線程會消耗資源
2滚停、當(dāng)請求激增時沃粗,由于系統(tǒng)資源有限,請求可能會被阻塞
3键畴、當(dāng)請求處于I/O阻塞的時候最盅,系統(tǒng)的資源被浪費了
Reactor設(shè)計模式
為了解決傳統(tǒng)的多線程處理并發(fā)請求的缺陷,設(shè)計人員采用一種基于事件驅(qū)動的設(shè)計模式起惕,這就是Reactor涡贱。
-
Reactor是采用基于事件驅(qū)動的設(shè)計,當(dāng)有事件觸發(fā)時惹想,才會調(diào)用處理器進行數(shù)據(jù)處理问词。
-
通過改進使用多線程處理業(yè)務(wù)邏輯
-
對于多個CPU的機器,為充分利用系統(tǒng)資源嘀粱,將Reactor拆分為兩部分激挪。
Reactor模式結(jié)構(gòu)
Reactor模式主要有一下幾個角色:
-
Handle
: 是事件的發(fā)源地,比如一個網(wǎng)絡(luò)socket草穆、磁盤文件等灌灾。而發(fā)生在handle上的事件可以有connection、ready for read悲柱、ready for write等锋喜。 -
Synchronous Event Demultiplexer
:同步事件分離器,本質(zhì)上是系統(tǒng)調(diào)用豌鸡。阻塞等待一系列的Handle中的事件到來嘿般,如果阻塞等待返回,即表示在返回的Handle中可以不阻塞的執(zhí)行返回的事件類型涯冠。這個模塊一般使用操作系統(tǒng)的select來實現(xiàn)炉奴。 -
Initiation Dispatcher
:初始分發(fā)器,也是reactor角色蛇更,提供了注冊瞻赶、刪除與轉(zhuǎn)發(fā)event handler的方法赛糟。當(dāng)Synchronous Event Demultiplexer檢測到handle上有事件發(fā)生時,便會通知initiation dispatcher調(diào)用特定的event handler的回調(diào)方法砸逊。 -
Event Handler
事件處理器璧南,其會定義一些回調(diào)方法或者稱為鉤子函數(shù),當(dāng)handle上有事件發(fā)生時师逸,回調(diào)方法便會執(zhí)行司倚,一種事件處理機制。 -
Concrete Event Handler
:具體的事件處理器篓像,實現(xiàn)了Event Handler动知。
在處理web請求時,通常有兩種體系結(jié)構(gòu)员辩,分別為:thread-based architecture(基于線程)盒粮、event-driven architecture(事件驅(qū)動)
事件驅(qū)動體系結(jié)構(gòu)是目前比較廣泛使用的一種。這種方式會定義一系列的事件處理器來響應(yīng)事件的發(fā)生屈暗,并且將服務(wù)端接受連接與對事件的處理分離拆讯。其中,事件是一種狀態(tài)的改變养叛。比如种呐,tcp中socket的new incoming connection、ready for read弃甥、ready for write爽室。