如您所说,这取决于手头的任务:
工作队列将工作推迟到内核线程中-您的工作将始终在流程上下文中运行。他们是可安排的,因此可以入睡。
通常,在工作队列或sotftirqs /
tasklet之间没有争论。如果延迟的工作需要睡眠,则使用工作队列,否则使用softirqs或tasklet。Tasklet也更适合于中断处理(它们得到了一定的保证,例如:Tasklet永远不会在下一个滴答中运行,它总是相对于其自身进行序列化等)。
当您确切地知道何时要发生某件事,并且不想在此期间中断/阻止进程时,内核计时器将非常有用。它们在流程上下文之外运行,并且相对于其他代码而言也是异步的,因此,如果您不小心,它们将成为争用条件的来源。
希望这可以帮助。



