Веб-вокеры, параллельные или параллельные? - PullRequest
0 голосов
/ 03 мая 2020

Есть много блогов на веб-работников, но кажется, что люди не понимают разницу параллелизма и параллелизма. Некоторые пишут, что это параллельное выполнение, а остальные пишут, чтобы они были параллельными.

Кто-нибудь, кто может помочь мне с этим беспорядком?

1 Ответ

1 голос
/ 04 мая 2020

Похоже, что может быть проблема с пониманием разницы между этими двумя терминами ...

Вместо того, чтобы перефразировать существующий ответ, я предлагаю вам прочитать этот ответ от Мейсона Уилера .
По сути, параллелизм - это состояние, параллелизм - один из способов достижения этого состояния.

Трудно комментировать те "блоги", о которых вы говорите, не имея возможности их прочитать, но если вы хотите быть в безопасности, то скажите, что Рабочий контекст запускается параллельно с контекстом окна .

Способ достижения этого параллелизма будет различным. На многопоточном процессоре высоки шансы, что на самом деле он будет параллельно , но даже тогда это не дано.

Например, вы можете запустить больше рабочих, чем число доступных потоков :

for( let i = 0; i <= navigator.hardwareConcurrency; i++ ) {
  const worker = new Worker('worker-script.js');
}

Здесь по крайней мере два контекста будут совместно использовать один и тот же поток ЦП, что означает, что эти контексты не будут работать параллельно, но, вероятно, при переключении задач .


В отдельной заметке, даже если оба контекста работают параллельно, некоторые операции потребуют, чтобы один контекст ожидал освобождения другого.
Например, в init порт сообщения рабочего должен быть «запутан» с временными портами, которые создал основной поток, чтобы он мог хранить входящие сообщения до тех пор, пока рабочий не будет готов обработать их. Эта запутанность требует, чтобы Worker ожидал освобождения контекста родителя, чтобы он мог его передать.
Другой пример - с OffscreenCanvas, где , по крайней мере, в реализации Chrome , Worker должен ждать чтобы основной поток был свободен, чтобы иметь доступ к тому же контексту графического процессора.

...