Как правило, цикл обработки событий только для ввода-вывода?
Я бы не считал таймеры (setTimeout
, setInterval
) и планирование (setImmeadiate
, process.nextTick
)) как IO, но обычно можно сказать, что события в цикле обработки событий происходят извне
и что именно представляет собой работа IO?
Это зависит от контекста, о котором вы говорите.Каждая программа получает определенный ввод от пользователя и генерирует определенный вывод.Например, в терминале вводом являются ваши нажатия клавиш, а выводом - то, что отображается.Когда речь идет о IO nodejs, обычно речь идет о сетевых / файловых операциях или, в более общем смысле: код не написан на js.
Например, допустим, что запрос поступает в NodeJ, которые затем отправляют исходящие сообщения.http запрос к API получить некоторые данные, не блокируя при этом пользователя.
Это задание ввода-вывода и как бы его обрабатывал NodeJ?
Nodejs порождает фонПоток, который выполняет запрос, тем временем основной процесс продолжается с другими вещами (продолжается с другими событиями в очереди событий).Затем, если выполняется асинхронный запрос, фоновый процесс помещает результат в очередь событий, цикл обработки событий извлекает его оттуда и выполняет обратные вызовы и т. Д.
что если вместо запроса http, который я хотеласинхронно сделать длительный расчет и затем вернуть значение пользователю?
Вы должны порождать другой поток в nodejs, в противном случае длительные вычисления выполняются синхронно.
Это тоже обрабатывается циклом событий, несмотря на то, что он связан с процессором?
Все когда-нибудь попадает в цикл обработки событий, и все выполняется на процессоре ...