В наши дни JavaScript является основным игроком во всех технологиях веб-разработки, на стороне клиента для улучшения пользовательского интерфейса, на стороне клиента, на некоторых веб-серверах в качестве логики на стороне сервера.
Добавьте к этому тот факт, что люди (по крайней мере, некоторые из них) начали переходить в разработке веб-игр с flash на javascript и HTML5.
Не пора ли ему поддерживать многопоточность! Существуют ли браузеры, которые позволяют JavaScript быть многопоточным, или это есть в каких-либо стандартах, HTML5 или будущих версиях?
Ответы:
Многопоточность не будет выполняться в EcmaScript, но может быть доступна в среде хоста.
Классическими примерами являются WebWorkers, которые позволяют вам ускорить работу фонового рабочего и использовать
<iframe>
его как способ порождения новых процессов.Следует отметить, что многопоточность в JavaScript не требуется (есть исключения, в основном программы, связанные с графикой). Вам не нужно несколько потоков, у вас уже есть цикл обработки событий для вашего графического интерфейса, а рендеринг графики (canvas) аппаратно ускоряется (это означает, что графический процессор отображает вашу графику параллельно для вас).
Хотя такие проекты, как webcl , довольно интересны.
источник
НЕТ
Многопоточность - одна из самых сложных вещей в программном обеспечении. Существует слишком много угловых случаев, которые действительно трудно проработать, когда ваш код не является детерминированным. (Я говорю о многопоточности с блокировками и т. Д.). Кроме того, все различные библиотеки JavaScript построены на предположении, что он не является многопоточным.
Тем не менее, есть веб-работники, которые дают вам основанную на актере среду для выполнения операций с несколькими типами операций. Вы можете создавать рабочих и передавать данные туда и обратно через события.
РЕДАКТИРОВАТЬ: Другая причина заключается в том, что когда JavaScript был создан, он был сделан с предположением, что он будет использоваться для небольших задач, поэтому параллелизм не был встроен. Для его модификации сейчас будет много кода. Добавив веб-работников, можно было создать систему, в которой был бы параллелизм без какой-либо общей памяти, но с использованием акторов - модели параллелизма, которая показала себя очень устойчивой в ряде других языков, таких как Erlang, Scala, Clojure. и т.п.
(Если вы не можете сказать, что я действительно не люблю параллелизм на основе блокировки)
источник
Multi threading is one of the hardest things in software to get right.
- Я просто удивлен этим! Браузер, который вы используете, ОС вашего рабочего стола, веб-сервер, обслуживающий эту страницу - практически каждое приложение, которое вы используете каждый день, является многопоточным. Вы уверены, что это значит? Еще не понизить вас, но я буду, если вы скажетеmultithreading is not done because it is hard
открытие javascript для многопоточности создаст больше проблем, чем решит:
текущая архитектура основана на однопоточных событиях (выполняется в потоке графического интерфейса чаще, чем нет), другими словами, с каждым блоком кода вы можете быть уверены, что в среде ничего не изменится от начала до конца, кроме того, что изменилось в коде.
как только вы разрешите вытеснение или параллельное выполнение, эта функция исчезнет, это означает, что вам нужно применить блокировки к данным, которые вы хотите изменить, плюс иметь все сложные условия отладки, чтобы избежать
возможно иметь псевдопараллельное выполнение с использованием тайм-аутов, это означает разделение больших или долго выполняющихся функций на атомарные чанки и использование,
setTimeout(function(){nextstep(args);},1);
чтобы другие вещи могли запускаться при необходимостиисточник
Некоторое время назад Intel выпустила River Trail , которая позволяет выполнять параллельное программирование на Javascript. Тем не менее, это плагин только для Firefox, и я не слышал о планах по внедрению этой технологии в W3C, а тем более ECMA.
источник