工作佇列 二 雜談

2021-09-11 08:09:11 字數 1596 閱讀 1843

工作佇列 實際上就是 乙個 核心執行緒維護了 乙個 工作包佇列, 這個執行緒叫做工作者執行緒

然後 其他的核心執行緒或者中斷處理程式 只需要建立 工作包, 然後 插入到工作包佇列中, 並喚醒 工作者 執行緒

此時 工作者執行緒就是一股腦的 開始 把工作包 佇列 中 的 工作包 全部給 幹完,幹完就睡覺

例如 你扔進去 乙個 包 : 包名叫做 寫乙個 linux 核心, 然後 工作者醒了之後,就開始 寫 linux 核心, 寫完了之後就開始睡覺.當然寫linux核心期間也是可以小憩的(工作者執行緒被排程出去)

.

//todo

linux中的workqueue機制就是為了簡化核心執行緒的建立。通過呼叫workqueue的介面就能建立核心執行緒。

並且可以根據當前系統cpu的個數建立執行緒的數量,使得執行緒處理的事務能夠並行化。

workqueue是核心中實現簡單而有效的機制,他顯然簡化了核心daemon的建立,方便了使用者的程式設計.

工作佇列(workqueue)是另外一種將工作推後執行的形式.工作佇列可以把工作推後,交由乙個核心執行緒去執行,

也就是說,這個下半部分可以在程序上下文中執行。最重要的就是工作佇列允許被重新排程甚至是睡眠

//todo
工作佇列執行在 核心空間, 不涉及任何使用者空間的事情
核心執行緒

kthread_create

排程 wake_up_process

一般工作佇列機制會被用作 中斷的底半部
工作佇列中的執行緒是 普通執行緒

create_workqueue

alloc_workqueue

__alloc_workqueue_key

rescuer->task =

kthread_create

(rescuer_thread, rescuer,

"%s"

, wq->name)

;中斷執行緒化中的執行緒是 實時執行緒,優先順序是 50

request_threaded_irq

__setup_irq

struct task_struct *t;

static

const

struct sched_param param =

; t =

kthread_create

(irq_thread, new,

"irq/%d-%s"

, irq, new->name)

;sched_setscheduler_nocheck

(t, sched_fifo,

¶m);

工作者執行緒 和 中斷執行緒化的執行緒 都是在 程序上下文中,因為他們都由 task_struct 結構體表示

init_workqueues 中建立的 工作者執行緒

system_wq =

alloc_workqueue

("events",0

,0);

工作佇列分析

一 用法 struct cpu workqueue struct cacheline aligned the externally visible workqueue abstraction is an array of per cpu workqueues struct workqueue str...

工作佇列模型

workqueue,中文稱其為工作佇列,是乙個用於建立核心執行緒的介面,通過它建立的核心執行緒來執行核心其他模組排列到佇列裡的工作,建立的核心執行緒被稱為工作者執行緒。要理解工作佇列的實現,重點在於理解相關的三個資料結構的含義及關係。1 表示工作佇列型別的資料結構 struct workqueue ...

工作佇列分析

一 用法 struct cpu workqueue struct cacheline aligned the externally visible workqueue abstraction is an array of per cpu workqueues struct workqueue str...