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