2016-12-18 6 views
2

Я понимаю, что в современных браузерах JS engnines (например, V8, Spidermonkey, Chakra и т. Д.) Используются пулы потоков внутри, хотя только один поток (запуск цикла событий) предоставляется JS-программисту.Почему современные браузерные JS-двигатели многопоточные?

Очевидно, что (редко используемым) веб-работникам требуется несколько потоков (или несколько процессов) - в противном случае они не могли бы использовать несколько ядер процессора. Мой вопрос: Отправлено от Web Workers, в чем преимущество внедрения JS-движка с несколькими потоками?

Почему JS-двигатель не всегда остается однопоточным, внутренне полагаясь на тот же цикл событий, который используют программисты JS, используя неблокирующие вызовы ОС, когда это необходимо для ввода IO?

Чтобы уточнить: JS-движок использует пул потоков, даже если пользователь открыл только одно окно с помощью одной вкладки.

Edit: это отвечает here

+1

Браузер просматривает сразу несколько веб-страниц одновременно? –

+0

@EdHeal Я отредактировал мой вопрос, чтобы уточнить. – max

+3

@max Даже с одной вкладкой пользовательский интерфейс браузера также может использовать JS в другом процессе. – Oriol

ответ

1

Есть много частей двигателя сценариев, которые извлекают выгоду из параллелизма, так как они могут работать одновременно для различных частей сценария или по отношению друг к другу:

  • разборе
  • сборник
  • JIT, оптимизация
  • отладка/регистрация/профилирование
  • мусор
  • график

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

+0

Является ли IO полностью однопоточным, или он также выигрывает от нескольких потоков? – max

+0

Это сильно зависит от конкретного типа ввода-вывода и не обязательно соответствует преимуществам самого механизма js. Сетевое взаимодействие обычно выполняется с использованием неблокирующих вызовов ОС, в то время как для параллельных файлов IO часто требуются потоки. И тогда есть связь с другими компонентами браузера, такими как DOM или конвейер рендеринга, которые также реализованы в многопоточном проекте. – Bergi