Это действительно зависит от того, откуда сделан вызов schedule()
; schedule()
может вызываться как из контекста процесса, так и из рабочей очереди. Рабочие очереди представляют собой потоки, запланированные ядром:
# ps auxw | grep worker
root 1378 0.0 0.0 0 0 ? S 20:45 0:00 [kworker/1:0]
root 1382 0.0 0.0 0 0 ? S 20:45 0:00 [kworker/2:0]
root 1384 0.0 0.0 0 0 ? S 20:45 0:00 [kworker/3:1]
...
[..]
означает, что процессы не выполняются в пространстве пользователя.
Функция worker_thread()
вызывает schedule()
после обработки рабочего элемента, но перед повторным запуском.
schedule()
также может вызываться от имени процесса, либо драйвером, либо кодом обработки сигнала, либо внутренними компонентами файловой системы, либо множеством других опций.