workqueue,中文稱其為工作佇列,是乙個用於建立核心執行緒的介面,通過它建立的核心執行緒來執行核心其他模組排列到佇列裡的工作,建立的核心執行緒被稱為工作者執行緒。要理解工作佇列的實現,重點在於理解相關的三個資料結構的含義及關係。
1 表示工作佇列型別的資料結構:struct workqueue_struct /*
* the externally visible workqueue abstraction is an array of
* per-cpu workqueues:*/
struct workqueue_struct ;
核心中預設的工作隊列為:
static struct workqueue_struct *keventd_wq __read_mostly;
其對應的工作者執行緒為:event/n 其中,n代表當前cpu中processor的個數。
2. 表示工作者執行緒的資料結構:struct cpu_workqueue_struct/*
* the per-cpu workqueue (
if single thread, we always use the first
* possible cpu).*
/struct cpu_workqueue_struct ____cacheline_aligned;
3. 表示工作的資料結構,即工作者執行緒處理的物件:struct work_struct
struct work_struct ;
再分析了以上三個物件後,重點掌握三者之間的關係。工作佇列型別,工作者執行緒以及工作三個資料物件之間的關係如圖所示。
workqueue的執行非常簡單,即在每次執行工作者執行緒的時候,去遍歷工作者執行緒對應的工作鍊錶上的工作,逐一進行處理即可,從這裡我們也可以猜到,工作佇列是沒有優先順序的,基本按照fifo的方式進行處理。
HashTable原理和原始碼分析
hashtable的特性 hashtable 跟hashmap 最大區別是hashmap具備執行緒安全性,所有的方法都是安全的 hashtable不支援null值和null鍵 hashtable結構同hashmap產不多 陣列 鍊錶,而且沒有紅黑樹,相比更簡單了 擴容 原始碼解析 引數 privat...
HashMap原始碼原理
hashmap原始碼解析 負載因子,樹化策略,內部hash實現,resize策略 內部屬性 負載因子 final float loadfactor 預設為0.75f 實際容量 int threshold loadfactor tab.length 樹化閾值 int treeify threshold...
Task原理原始碼分析
進入updatedependencies 函式 進入task類中的run 方法 在上面的task的run方法中,呼叫了抽象方法,runtask 那就意味著關鍵的操作都要依賴於子類的實現,task的子類shufflemaptask,resulttask,要執行它們的runtask,才能執行我們自定義的...