fetchmanager:請求管理器介面。
既然是管理器,就需要知道管理的物件是什麼?fetchrequest——管理的是一次次的請求。
既然是管理器,就需要給被管理者提供容所?fetchrequestqueue——請求delay queue。
既然是管理器,就需要有管理實施者?fetchrequestrunner——從請求佇列中提取請求,然後處理。
既然是管理器,就需要知道管理了哪些事情?
① 啟動請求處理器
② 停止請求處理器
③ 重置亦即初始化管理器
④ 新增請求
⑤ 獲取請求總數
⑥ 標記處理器狀態
管理器如何管理的?
①處理器 fetchrequestrunner
while (!this.stopped) catch (final interruptedexception e)
}
void processrequest(final fetchrequest request)
}
②請求佇列 fetchrequestqueue
//佇列中定義的執行緒用來等待佇列的頭元素。這種leader-follower設計模式的變種有助於使等待的時間最小化。當乙個執行緒變為leader,它只需等待下乙個delay的時間,而其他執行緒將無限期等待。
//leader執行緒在從take()或者poll()等等方法返回之前必須signal其他執行緒,除非這期間其他執行緒變成了leader執行緒。
//每當佇列的頭結點被更早到期時間的節點替代,leader失效被重新設定為null,其他的執行緒——不一定是當前的leader,將被signal。
//因此等待執行緒要時刻準備著獲取leader或者喪失leader
private thread leader = null;
public void offer(fetchrequest e)
// 請求關聯本佇列
e.setrefqueue(this);
//入隊、排序
this.queue.offer(e);
collections.sort(this.queue);
// leader is changed.
if (this.queue.peek() == e)
}finally
}public fetchrequest take() throws interruptedexception
else
else if (this.leader != null)
else
finally }}
}}
}finally
lock.unlock();
}}
metaq原始碼分析 一
一 metaq簡介 metaq 全稱metamorphosis 是乙個高效能 高可用 可擴充套件的分布式消 息中介軟體,metaq具有訊息儲存順序寫 吞吐量大和支援本地和xa事務等特性,適用於大吞吐量 順序訊息 廣播和日誌資料傳輸等場景,metaq在阿 裡巴巴各個子公司被廣泛應用,每天 250億 條...
MetaQ技術內幕 原始碼分析 一
筆者最近在業務上需要使用到metaq,也藉此閱讀了metaq的相關原始碼,準備分享metaq原始碼分析。先掃掃盲,如果讀者對metaq已經較為熟悉,可以跳過下一段落。一 metaq簡介 metaq 全稱metamorphosis 是乙個高效能 高可用 可擴充套件的分布式訊息中介軟體,metaq具有訊...
Qwt原始碼解讀之QwtInterval 類
qwtinterval 類表徵乙個區間,這個區間由兩個double型別的上限值max和下限值min所表示。它可以表示 min,max min,max min,max 和 min,max 等4種情況。分析 cpp view plain copy class qwt export qwtinterval...