Как вы сказали, это зависит от поставленной задачи:
очереди работы отложить работу в нить ядра - ваша работа всегда будет работать в процессе контексте. Они планируются и могут спать.
Обычно не существует дебатов между рабочими очередями или sotftirqs/tasklets; если отложенная работа должна спать, используются рабочие очереди, в противном случае используются softirqs или tasklets. Задачи также более подходят для обработки прерываний (им предоставляются определенные заверения, такие как: тасклет никогда не запускается позже, чем на следующий тик, он всегда сериализуется по отношению к себе и т. Д.).
Таймеры ядра хороши, когда вы точно знаете, когда хотите что-то произойти, и не хотите прерывать/блокировать процесс тем временем. Они запускают внешний контекст процесса, и они также асинхронны в отношении другого кода, поэтому они являются источником условий гонки, если вы не будете осторожны.
Надеюсь, это поможет.
Как бы вы выбрали использование потока ядра и рабочей очереди? –
Ну, цель создания рабочих мест состояла в том, что они частично заменяли потоки ядра как средство планирования задач в ядре (ленивые рабочие места были последними усилиями для решения этого), поскольку в какой-то момент количество потоков ядра в коробка становится дорогостоящей для управления. Имея это в виду, я думаю, что я вообще предпочитаю работу над потоками ядра для большинства целей и задач. –