Работает ли процессорное время на Node.js с рабочим потоком или без него, если есть только 1 процессорное ядро? - PullRequest
1 голос
/ 10 февраля 2020

Начиная с Node.js 10.5, они представили новый рабочий поток, который делает Node.js многопоточным окружением.

Раньше, когда в Node.js был только один поток, среза времени процессора не происходило из-за характера событий (если я правильно понимаю).

Так что теперь на узле несколько потоков с одно физическое ядро ​​процессора, как они разделяют процессор? Это расписание планировщика ОС для каждого потока для запуска в течение различного количества времени или что?

1 Ответ

1 голос
/ 11 февраля 2020

Рабочие потоки объявляются как

Рабочий класс представляет независимое JavaScript выполнение потока .

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

Рабочие потоки в NodeJS имитируют Worker API в современных браузерах (не случайно, NodeJS в основном браузер без пользовательского интерфейса и с несколькими дополнительными JS API) и в этом контексте рабочие потоки действительно родные потоки, запланированные ОС.

Вышеприведенное описание, по-видимому, подразумевает, что и в NodeJS рабочие потоки реализованы с собственными потоками, а не с расписанием, управляемым NodeJS.
Последнее будет бесполезным, поскольку это точно что делает JS событие l oop в сочетании с асин c методами.
Таким образом, рабочий поток - это просто еще один "экземпляр" (контекст) NodeJS, выполняемый другим собственный поток в том же процессе.
Будучи собственным потоком, он управляется и планируется ОС. И точно так же, как вы можете запустить более одной программы в одном процессоре, вы можете сделать это с потоками (забавный факт: во многих ОС потоки являются единственными планируемыми объектами. Программы - это просто группа потоков с общее адресное пространство и другие атрибуты).

Поскольку NodeJS является открытым исходным кодом, это легко проверить, см. Функции Worker::StartThread и Worker::Run.

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

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