Почему не делает многопоточности поддержки JavaScript?

Сортировка в Swift 2.0 Демо-ссылка , изменение синтаксиса из «sorted (myArray, {})» на «myArray.sort ({})». Расширяемый протокол.

let myArray = ["Step 6", "Step 12", "Step 10"]
let sortedArray = myArray.sort({ x, y in
    return x.localizedStandardCompare(y) == NSComparisonResult.OrderedAscending
})

dump(sortedArray)

Swift 1.2 Demo

253
задан 7 revs, 5 users 100% 5 September 2008 в 00:17
поделиться

10 ответов

Согласно эта статья уже возможно реализовать поточную обработку JavaScript.

0
ответ дан GateKiller 27 June 2019 в 16:44
поделиться

JavaScript не поддерживает многопоточность, потому что интерпретатор JavaScript в браузере является единственным потоком (AFAIK). Даже Google Chrome не позволит единственной сети page’s JavaScript, выполненный одновременно, потому что это вызвало бы крупные проблемы параллелизма в существующих веб-страницах. Весь Chrome делает разделить несколько компонентов (различные вкладки, плагины, и так далее) в отдельные процессы, но я can’t воображаю единственную страницу, имеющую больше чем один поток JavaScript.

можно однако использовать, как был предложен, setTimeout для разрешения своего рода планирования и “fake” параллелизма. Это заставляет браузер восстанавливать управление потоком рендеринга и запускать код JavaScript, предоставленный setTimeout после данного количества миллисекунд. Это очень полезно, если Вы хотите позволить область просмотра (что Вы видите) обновляться при выполнении операций на нем. Просто цикличное выполнение через, например, координаты и обновление элемента соответственно просто позволят Вам видеть запуск и конечные положения и ничто промежуточное.

Мы пользуемся библиотекой абстракции в JavaScript, который позволяет нам создавать процессы и потоки, которыми все управляет тот же интерпретатор JavaScript. Это позволяет нам выполнять действия следующим образом:

  • Процесс A, Поток 1
  • Процесс A, Поток 2
  • Процесс B, Поток 1
  • Процесс A, Поток 3
  • Процесс A, Поток 4
  • Процесс B, Поток 2
  • Процесс Паузы
  • Процесс B, Поток 3
  • Процесс B, Поток 4
  • Процесс B, Поток 5
  • Запускает Процесс
  • Процесс A, Поток 5

, Это позволяет некоторую форму планирования и фальсифицирует параллелизм, запуск и остановку потоков, и так далее, но это не будет истинная многопоточность. Я don’t думают, что это будет когда-либо реализовываться на самом языке, начиная с истинной многопоточности, только полезен, если браузер может выполнить единственную многопоточную страницу (или даже больше чем одно ядро), и трудности, там путь, больше, чем дополнительные возможности.

Для будущего JavaScript, проверьте это: https://developer.mozilla.org/presentations/xtech2006/javascript /

182
ответ дан user4437749 4 November 2019 в 12:24
поделиться

Насколько я услышал, что Google Chrome будет иметь многопоточный JavaScript, таким образом, это будет "ток реализации" проблема.

0
ответ дан BlaM 4 November 2019 в 12:24
поделиться

Это - реализации, который не поддерживает многопоточность. В настоящее время Google Gears позволяет использовать некоторую форму параллелизма путем выполнения внешних процессов, но это об этом.

новый Google браузера, как предполагается, выпускает сегодня (Google Chrome), выполняет некоторый код параллельно путем разделения его в процессе.

базовый язык, конечно, может иметь ту же поддержку как, сказать Java, но поддерживать для чего-то как параллелизм Erlang, нигде не около горизонта.

1
ответ дан Greg Roberts 4 November 2019 в 12:24
поделиться

Так же, как матовый сказанный b вопрос не очень ясен. Предположение, что Вы спрашиваете о поддержке многопоточности на языке: потому что это не необходимо для 99,999% приложений, работающих в браузере в настоящее время. При реальной необходимости в нем существуют обходные решения (как использование window.setTimeout).

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

4
ответ дан Grey Panther 4 November 2019 в 12:24
поделиться

Вы имеете в виду, почему язык не поддерживает многопоточность или почему не делают механизмы JavaScript в браузерах поддерживают многопоточность?

ответ на первый вопрос - то, что JavaScript в браузере предназначен, чтобы быть выполненным в песочнице и способом machine/OS-independent, добавить, что поддержка многопоточности усложнила бы язык и связала бы язык слишком тесно с ОС.

7
ответ дан matt b 4 November 2019 в 12:24
поделиться

Традиционно, JS был предназначен, если коротко, быстро рабочие части кода. Если у Вас было основное продолжение вычислений, Вы сделали это на сервере - идея приложения JS+HTML , которое работало в Вашем браузере в течение долгих промежутков времени, делая нетривиальные вещи, было абсурдно.

, Конечно, теперь у нас есть это. Но, потребуется немного для браузеров для наверстывания - большинство из них было разработано на основе однопоточной модели и изменения, которое не легко. Google Gears обходит много потенциальных проблем путем требования, чтобы фоновое выполнение было изолировано - никакое изменение DOM (так как это не ориентировано на многопотоковое исполнение), никакие объекты доступа, созданные основным потоком (так же). В то время как строгий, это, вероятно, будет самым практическим дизайном для ближайшего будущего, и потому что это упрощает дизайн браузера, и потому что это снижает риск, вовлеченный в разрешение неопытных кодеров JS, бездельничают с потоками...

@marcio:

, Почему это - причина не реализовать многопоточность в JavaScript? Программисты могут сделать то, что они хотят с инструментами, которые они имеют.

Таким образом, давайте не давать им инструменты, которые так легки к неправильное употребление что любой веб-сайт i открытых концов, разрушающих мой браузер. Наивная реализация этого принесла бы Вам прямо в территорию, которая вызвала MS столько головных болей во время разработки IE7: дополнительные авторы играли быстро и свободный с моделью потоков, приводящей к скрытым ошибкам, которые стали очевидными когда объектные жизненные циклы, измененные на основном потоке. ПЛОХО. Если Вы пишете многопоточные дополнения ActiveX для IE, я предполагаю, что он идет с территорией; не означает, что это должно пойти дальше, чем это.

22
ответ дан Community 4 November 2019 в 12:24
поделиться

Я не знаю объяснения для этого решения, но я знаю, что можно моделировать некоторые преимущества многопоточного программирования с помощью setTimeout. Можно дать иллюзию нескольких процессов, делающих вещи одновременно, хотя в действительности, все происходит в одном потоке.

Просто имеют Вашу функцию, делают определенную работу, и затем называют что-то как:

setTimeout(function () {
    ... do the rest of the work...
}, 0);

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

10
ответ дан pkaeding 4 November 2019 в 12:24
поделиться

Без надлежащей языковой поддержки для синхронизации потоков даже не имеет смысла пробовать новые реализации. Существующие сложные приложения JS (например, любые, использующие ExtJS), скорее всего, неожиданно завершат работу, но без ключевого слова synchronized или чего-то подобного было бы также очень сложно или даже невозможно написать новые программы, которые ведут себя правильно.

0
ответ дан 23 November 2019 в 02:49
поделиться

Многопоточность JavaScript (с некоторыми ограничениями) здесь. Google внедрил воркеры для Gears, и они включены в HTML5. Большинство браузеров уже добавили поддержку этой функции.

Потоковая безопасность данных гарантируется, потому что все данные, передаваемые работнику / от рабочего, сериализуются / копируются.

Для получения дополнительной информации прочтите:

http://www.whatwg.org/specs/web-workers/current-work/

http://ejohn.org/blog/web-workers/

21
ответ дан 23 November 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: