Reactor簡單例子 晏無心 新浪部落格

2021-10-10 12:31:38 字數 1596 閱讀 8767

reactor模式是把乙個完整的io操作分成幾部分來進行,使用乙個或多個reactor來處理io請求,對於具體的io讀寫以及資料讀取完成後的操作,分成更細粒度的模組,根據具體的需求和模組的耗時,來選擇性使用單執行緒或是多執行緒或者執行緒池來完成整個io操作。

來看具體的例子:

reactor實現了runnable介面,為多執行緒做準備(實際應用中未必要使用多執行緒,很多時候使用單執行緒);

註冊accpet事件;

設定通道為非阻塞。

這裡的while (true)和單執行緒的io多路復用一致,不同的是在dispatch分發這裡,這裡可以選擇單執行緒繼續執行,也可以使用多執行緒執行,根據io操作的耗時來決定。

這裡的key.attachment()第一次是在reactor初始化時設定的:

attach了乙個acceptor物件。

接下來來看acceptor:

acceptor同樣實現了runnable介面,為多執行緒做準備,根據實際需要來決定是否使用多執行緒。

在acceptor裡,對客戶端連線的請求進行處理:

設定非阻塞模式;

註冊讀事件;

attach具體的處理handler。

selector.wakeup()針對多執行緒,喚醒selector.select()方法上阻塞的執行緒。

這裡sk.attach(new handler(sk, sc));後,會返回到reactor的while(true)主迴圈裡dispatch()方法進行處理:

最後來看具體的處理handler:

handler同樣實現runnable介面,為多執行緒做準備。

新增乙個state變數,用來區分 讀/寫 操作。

在handler裡進行具體的io讀寫並且對 讀/寫 監聽事件進行切換。

jQuery ajax無重新整理儲存例子

最近研究jquery,今天搞清楚了ajax要怎麼實現,使用方法意外的簡單。有興趣的可以看我上次提到的手冊,我這裡演示乙個簡單的儲存表單的例子。提交表單的方法 post jquery.php?request ajax getforms form1 function msg 我們輸出提交的資訊作為測試,...

簡單委託例子

例子1 using system using system.collections.generic using system.text 例子2 using system using system.collections.generic using system.text namespace 介面 c...

Pro C 簡單例子

include exec sql begin declare section char userid 11 hr oracle char std name 10 int std number int dept number exec sql end declare section char temp...