Рабочий поток событий должен мультиплексировать много задач, поэтому его нельзя блокировать (вызывать schedule () внутри одной задачи). Однако есть много задач, которые нужно блокировать (ожидание диска, сети, некоторых устройств и т. Д.), И есть много функций в ядре, которые блокируют внутри себя (например, семафоры или даже выделение памяти). Такие функции могут выполняться только от имени пользователя внутри системного вызова или в выделенном потоке ядра.
Хотя теоретически можно было бы переписать такой код в длинную цепочку событий, это сделало бы его сложным и неприемлемым, а нагрузка на поток ядра довольно мала.