順序:
建立反應器。(開啟選擇器,監聽埠)
selector註冊serversocket---accept(得到selectionkey-事件集)
selection附件:accpt處理器。
執行反應器,選擇器獲取事件。
分發事件。
獲取事件集對應的附件,執行accpt處理器。
accpt處理器:接收新連線
accpt處理器:為新連線建立iohandler
accpt處理器:為新連線建立iohandler ---- (1)新的socketchannel傳輸通道註冊,同乙個選擇器中,保證是乙個執行緒處理。
accpt處理器:為新連線建立iohandler ---- (2)將iohandler自身作為附件,加入選擇器中。
accpt處理器:為新連線建立iohandler ---- (3)註冊事件:讀&寫。
class reactor implements runnable
public void run()
selected.clear();
}} catch (ioexception ex)
}//反應器的分發方法
void dispatch(selectionkey k)
}// 新連線處理器
class acceptorhandler implements runnable
}//….
}//一、將新的socketchannel傳輸通道,註冊到反應器reactor的同乙個選擇器中,保證是乙個執行緒處理。
//二、將iohandler自身作為附件,加入選擇鍵中。
class iohandler implements runnable
public void run()
}
單執行緒反應器的缺點:某個handler阻塞時,會導致其他handler得不到執行。
四、多執行緒reactor反應器模式
總體思路:
//....反應器
class multithreadechoserverreactor ;
}private void startservice()
//子反應器
class subreactor implements runnable
public void run()
keyset.clear();
}} catch (ioexception ex)
}void dispatch(selectionkeysk) }}
// handler:新連線處理器
class acceptorhandler implements runnable catch (ioexception e)
if (next.incrementandget() == selectors.length) }}
public static void main(string args) throws ioexception
}
Reactor反應器模式 epoll
最近在看redis原始碼,主體流程看完了。在網上看到了reactor模式,看了一下,其實我們經常使用這種模式。反應器設計模式 reactor pattern 是一種為處理併發服務請求,並將請求提交到乙個或者多個服務處理程式的事件設計模式。當客戶端請求抵達後,服務處理程式使用多路分配策略,由乙個非阻塞...
基礎 Reactor反應器模式
目錄 一,單執行緒reactor反應器模式 二,多執行緒reactor反應器模式 來由 最傳統的模式中,乙個執行緒,阻塞的完成獨寫任務,效率低下,於是就產生了經典的 connection per thread 模式,當乙個任務觸發的時候就派發給乙個執行緒去處理,也就是乙個執行緒對應乙個socket,...
Reactor模式(反應器模式)
reactor這個詞譯成漢語還真沒有什麼合適的,很多地方叫反應器模式,但更多好像就直接叫reactor模式了,其實我覺著叫應答者模式更好理解一些。通過了解,這個模式更像乙個侍衛,一直在等待你的召喚,或者叫召喚獸。併發系統常使用reactor模式,代替常用的多執行緒的處理方式,節省系統的資源,提高系統...