В чем разница между интенсивным использованием процессора и интенсивным вводом / выводом? - PullRequest
0 голосов
/ 09 марта 2020

В чем разница между CPU intensive и I/O intensive?


Почему node js не загружает процессор?

1 Ответ

1 голос
/ 09 марта 2020

CPU интенсивно - это код, который использует много циклов CPU. Например, шифрование / дешифрование или транскодирование видео будут тяжелыми загрузчиками ЦП.

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

Обычно говорят, что nodejs особенно хорош для интенсивного ввода-вывода кода из-за неблокирующей архитектуры ввода-вывода. Он может очень эффективно выполнять множество операций ввода-вывода в полете одновременно (больше, чем архитектуры, которые обычно используют отдельный поток для каждой операции ввода-вывода).

В общем случае nodejs выполняется ваш Javascript в одном потоке и, таким образом, использует для этого только одно ядро, так что не стоит делать кучу вещей, которые занимают много ЦП, потому что обычно не задействуют более одного ядра ЦП, поэтому операции с интенсивным использованием ЦП не запускайте параллельно, а сериализуйте один за другим.

Кроме того, из-за однопоточного характера запуска Javascript и архитектуры, управляемой событиями, когда интерпретатор работает с интенсивной загрузкой процессора операция, это не может делать ничего другого. Другие вещи (например, новые сетевые запросы, поступающие на ваш сервер) должны ждать, пока код, интенсивно использующий процессор, не будет выполнен. Не существует временного среза между несколькими потоками вашего Javascript, чтобы сбалансировать планирование.

Итак, эта очень эффективная неблокирующая архитектура ввода-вывода в сочетании с однопоточным запуском вашего Javascript создает это понятие что nodejs хорош для большого количества операций ввода-вывода и не очень хорош для операций, требующих большого количества ЦП.

Теперь есть способы обойти операции, требующие большого количества ЦП. Более новые версии nodejs имеют Рабочие потоки , так что теперь вы можете запускать столько потоков, сколько они полезны, и повысить общую производительность выполнения кода, интенсивно использующего процессор, путем удаления кода, интенсивно использующего процессор, из основного потока. так что можно свободно запускать событие l oop. Кроме того, вы можете использовать рабочие потоки, чтобы задействовать больше ядер ЦП для выполнения работы, интенсивно использующей ваш процессор.

Например, если у вас есть приложение, которое выполняло кучу тяжелых шифрований, вы можете запустить небольшой пул рабочие потоки, а затем создать очередь работы шифрования. Когда основной поток JS хотел выполнить какое-то шифрование, он отправлял задание в очередь шифрования, и один из рабочих потоков в пуле прерывал работу шифрования. Он будет иметь неблокирующий, асинхронный интерфейс, чтобы основной поток не блокировался и мог свободно выполнять другие действия (например, обслуживать другие запросы), а когда рабочий поток был выполнен, он отправлял бы сообщение главному поток, который получит уведомление и сможет затем получить доступ к результату шифрования, даже не блокируя основной поток JS.

Вы также можете использовать встроенный модуль кластеризации, чтобы задействовать несколько процессоров для обработки входящей работы (независимо от того, интенсивно ли он загружен) или интенсивная работа в сети).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...