工作佇列模型

2021-06-02 19:17:27 字數 992 閱讀 4935

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有所不同。工作佇列可以把工作推後,交由乙個核心執行緒去執行,也就是說,這個下半部分可以 在程序上下文中執行。這樣,通過工作佇列執行的 能佔盡程序上下文的所有優勢。最重要的就是工作佇列允許被重新排程甚至是睡眠。那麼,什麼...