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的方式進行處理。
工作佇列分析
一 用法 struct cpu workqueue struct cacheline aligned the externally visible workqueue abstraction is an array of per cpu workqueues struct workqueue str...
工作佇列分析
一 用法 struct cpu workqueue struct cacheline aligned the externally visible workqueue abstraction is an array of per cpu workqueues struct workqueue str...
Linux 工作佇列
工作佇列 work queue 是另外一種將工作推後執行的形式,它和tasklet有所不同。工作佇列可以把工作推後,交由乙個核心執行緒去執行,也就是說,這個下半部分可以 在程序上下文中執行。這樣,通過工作佇列執行的 能佔盡程序上下文的所有優勢。最重要的就是工作佇列允許被重新排程甚至是睡眠。那麼,什麼...