工做隊列(work queue)是Linux kernel中將工做推後執行的一種機制。這種機制和BH或Tasklets不一樣之處在於工做隊列是把推後的工做交由一個內核線程去執行,所以工做隊列的優點就在於它容許從新調度甚至睡眠。數據結構
工做隊列是2.6內核開始引入的機制,在2.6.20以後,工做隊列的數據結構發生了一些變化,所以本文分紅兩個部分對2.6.20以前和以後的版本分別作介紹。函數
I、2.6.0~2.6.19
數據結構:spa
1線程 2指針 3code 4隊列 5table 6class 7變量 8 |
|
pending是用來記錄工做是否已經掛在隊列上;
entry是循環鏈表結構;
func做爲函數指針,由用戶實現;
data用來存儲用戶的私人數據,此數據便是func的參數;
wq_data通常用來指向工做者線程(工做者線程參考下文);
timer是推後執行的定時器。
work_struct的這些變量裏,func和data是用戶使用的,其餘是內部變量,咱們能夠不用太過關心。