悟空學Linux專欄----第39篇

  最近沙僧休息了好久,唐僧希望沙僧能夠講工作隊列,工作隊列是Linux系統中最爲重要的一箇中斷後半部分機制,也是最爲實用的一種。這讓沙僧很是高興,所以一大早沙僧就興奮的來到了課堂。

  沙僧:工作隊列其實是將任務交給一個內核線程來執行,因此這部分代碼總是在進程的上下文中執行。

  2號童鞋:老師,工作隊列的線程和軟中斷的線程有什麼區別呢?

  沙僧:啊,軟中斷中也有線程啊?這個我還真不知道哦?

  2號童鞋:八戒老師說了,軟中斷可以在線程中執行,不管你信不信,反正我信了。

  沙僧:哦,軟中斷應該不能在進程上下文中執行吧,而工作隊列的這個線程可以在進程上下文中執行吧,而且軟中斷是不能夠休眠的,但是工作隊列執行的過程中是允許休眠的。這個對系統很重要,因爲允許休眠就意味着,進程可以調度。而在軟中斷執行的過程中,進程是不能調度的。

  2號童鞋:那麼老師,我們需要在什麼情況下使用工作隊列、什麼情況下使用tasklet呢、什麼情況下使用軟中斷呢?

  沙僧:如果執行的後半部分需要休眠,則選用工作隊列,而且這是唯一的選擇。如果後半部分不需要休眠,則儘量使用tasklet機制,這個機制具有軟中斷的特點,同時接口比較簡單。除非特別需要注重效率,否則不建議使用軟中斷,因爲同一種軟中斷可以同時在多個CPU上一起執行,所以軟中斷的執行的同步更多的需要程序員考慮。

  2號童鞋:老師可不可這麼理解啊,就像醫院裏來看病的病人一樣,軟中斷是急診中的急診,一刻也不能耽誤,tasklet是急診,而工作隊列則是普通的病人,經常被急診給打斷。

  沙僧:這位同學悟性很高啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章