. Это довольно просто:
Вот рабочая версия вашего кода:
(async function(){
var response = await superagent.get('...')
console.log(response)
})()
ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]
Причина историческая и программная. Задача бездействия - это выполнение задачи, если никакая другая задача не выполняется, как вы это сказали. Он имеет наименьший возможный приоритет, поэтому он не запускает никакой другой задачи.
Программная причина: это упрощает планирование процесса, потому что вам не нужно заботиться о специальном случае: «Что произойдет, если никакая задача не будет выполнена?», поскольку всегда существует хотя бы одна задача, выполняемая , простаивающая задача. Также вы можете подсчитать количество процессорного времени, используемого для каждой задачи. Без задачи бездействия, какая задача получает учетную запись cpu-time, которую никто не нуждается?
Историческая причина. До того, как у нас был cpus, способный уйти или перейти в режимы энергосбережения, он должен был работать полной скорости в любое время. Он выполнил серию NOP-инструкций, если никакие задачи не выполнялись. Сегодня планирование простаивающей задачи обычно снижает производительность процессора с помощью HLT-команд (halt), поэтому энергопотребление сохраняется. Таким образом, в наши дни есть какая-то функциональность в незанятой задаче.
В Windows вы можете увидеть незанятую задачу в списке процессов, это незанятый процесс.
На процессор действительно одна незанятая задача, но она не хранится в главном списке задач, а находится в структуре runpue struct «rq» процессора, как struct task_struct *.
Это активируется планировщиком всякий раз, когда нет ничего лучше (на этом ЦП) и выполняет какой-то код, специфичный для архитектуры, для простоя процессора в состоянии низкой мощности.
Ядро linux поддерживает список ожидания процессов, которые «блокируются» на IO / мьютексах и т. д. Если нет запускаемого процесса, процесс простоя помещается в очередь выполнения до тех пор, пока он не будет выгружен задачей, выходящей из ожидания queue.
Причина, по которой у него есть задача, заключается в том, что вы можете измерить (приблизительно), сколько времени ядро тратится из-за блоков на IO / locks и т. д. Кроме того, это делает код, который намного проще для ядро, поскольку задача бездействия такая же, как и каждая задача, которой он нужен для переключения контекста, вместо задачи «специального случая», которая может затруднить изменение поведения ядра.
Вы можете использовать ps -ef, и в нем будет указано отсутствие процесса, который выполняется. Затем в первой ссылке он отобразит первый pid-0, который является задачей swapper.