Ответ 1
Тасклеты
- являются старыми (около 2,3, я считаю)
- имеют простой, простой API
- предназначены для низкой задержки
- не может спать (запускается атомарно в мягком контексте IRQ и гарантированно никогда не будет работать на более чем одном процессоре данного процессора для данной задачи)
Рабочие очереди:
- более поздние (введены в 2.5)
- имеет гибкий API (поддерживается больше опций/флагов)
- предназначены для более высокой задержки
- может спать
В нижней строке: используйте талисманы для высокоприоритетных задач с малой задержкой, которые все равно должны выполняться вне жесткого контекста IRQ.
Вы можете управлять некоторым уровнем приоритета с помощью талисманов, используя tasklet_hi_enable
/tasklet_hi_schedule
(вместо их соответствующих версий no- _hi
). От этой страницы IBM:
Расписание нормального приоритета выполняется с помощью softirq уровня TASKLET_SOFTIRQ, где высокий приоритет осуществляется с помощью softirq уровня уровня HI_SOFTIRQ.
...
Сначала запрашиваются таблетки из высокоприоритетного вектора, за которыми следуют те, которые находятся в нормальном векторе. Обратите внимание, что каждый процессор поддерживает свои собственные нормальные и высокоприоритетные векторы softirq.
С рабочими очередями при его создании вы будете использовать alloc_workqueue
(create_workqueue
устарел), а может передать флаг, чтобы задать более высокий приоритет:
WQ_HIGHPRI:
Рабочие элементы highpri wq помещаются в очередь в пул потоков highpri целевой gcwq. Файловые пулы Highpri обслуживаются рабочими потоками с повышенным приятным уровнем.
Обратите внимание, что обычные и highpri потоковые пулы не взаимодействуют с каждым Другие. Каждый из них поддерживает отдельный пул работников и реализует Менеджмент concurrency среди своих работников.
Я не могу ответить на все ваши вопросы, но я надеюсь, что это все равно поможет.