There are many ways to schedule work in the linux kernel: timers, tasklets, work queues, and kernel threads. What are the guidelines for when to use one vs another?
Kernel threads form the basis for Work Queues. They are the only types of kernel helper routines that run within the process context.