1

Я написал алгоритм с JavaScript. Когда я запускаю его в Google Chrome, это занимает около 30 минут, что довольно долго.
Когда я открываю диспетчер задач во время вычислений, я вижу, что Chrome занимает около 25% моего процессора, то есть 1 из 4 моих ядер.

Можно ли позволить Chrome использовать больше моих процессоров, скажем, 3 из 4, чтобы вычисления выполнялись быстрее?

PS: я не против использовать любой другой браузер (например, Firefox), если Chrome не будет поддерживать это.

1 ответ1

4

Стандартный JavaScript является однопоточным: он может выполнять только одну программу на одном процессоре (ядре).

Для того, что вы описываете, вам, вероятно, придется разделить ваш набор данных на куски и создать отдельный JavaScript Web Worker, выполняющий ваш алгоритм для обработки каждого чанка. Это предполагает, что у вас есть структурно однородный набор данных. (Остерегайтесь граничных условий.)

Эффективное использование Web Workers требует понимания того, как переписывать последовательные алгоритмы как параллельные, и других аспектов многопоточного программирования - все это требует передовых навыков программирования.

JavaScript Web Workers - это автономные независимые исполнительные блоки (потоки), отдельные и изолированные от основной программы и друг от друга. Связь между основной программой и веб-работниками, а также между самими веб-работниками осуществляется через сообщения данных, управляемые событиями.

Операционная система хоста может выполнять отдельные потоки Web Worker на отдельных ядрах, обеспечивая до 100% использования процессорной мощности.

Веб-работники предназначены только для вычислений. Они не имеют доступа к DOM или любым компонентам браузера, связанным с DOM, таким как window. (Это позволяет избежать всевозможных потенциальных проблем с сериализацией доступа к ним.) Таким образом, любой вывод, который нужно отобразить, должен быть передан обратно из Worker в основной поток.

Все последние браузеры предлагают некоторую степень поддержки для веб-работников. Таблица внизу страницы Mozilla Web Worker API, https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API, показывает поддержку отдельных браузеров и версий для различных функций Web Worker.

Хороший учебник по использованию веб-работников:

http://www.html5rocks.com/en/tutorials/workers/basics/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .