Nun, heutzutage ist JavaScript der Hauptakteur in allen Webentwicklungstechnologien, auf der Clientseite zur Verbesserung der Benutzeroberfläche, der clientseitigen Logik, auf einigen Webservern auch als serverseitige Logik
Hinzu kommt, dass die Leute (zumindest einige von ihnen) in der Entwicklung von Webspielen von Flash zu Javascript und HTML5 übergingen
Ist es nicht an der Zeit, Multithreading zu unterstützen? Gibt es Browser, die das Multithreading von JavaScript ermöglichen, oder gibt es sie in Standards, HTML5 oder zukünftigen Versionen ?!
Antworten:
Multithreading wird nicht in EcmaScript durchgeführt, kann jedoch in Hostumgebungen verfügbar gemacht werden.
Die klassischen Beispiele sind WebWorker, mit denen Sie einen Background-Worker für die Arbeit und den Missbrauch von
<iframe>
's' starten können , um neue Prozesse hervorzubringen .Es ist zu beachten, dass Multithreading in JavaScript nicht erforderlich ist (es gibt Ausnahmen, hauptsächlich grafikbezogene Programme). Sie benötigen nicht mehrere Threads, Sie haben bereits eine Ereignisschleife für Ihre GUI und Ihr Grafik-Rendering (Canvas) ist hardwarebeschleunigt (dh die GPU rendert Ihre Grafiken parallel für Sie).
Obwohl Projekte wie webcl ziemlich aufregend sind.
quelle
NEIN
Multithreading ist eines der schwierigsten Dinge in der Software, um es richtig zu machen. Es gibt viel zu viele Eckfälle, die wirklich schwer zu lösen sind, wenn Ihr Code nicht deterministisch ist. (Ich spreche von Multithreading mit Sperren usw.). Darüber hinaus basieren alle verschiedenen JavaScript-Bibliotheken auf der Annahme, dass es sich nicht um Multithreading handelt.
Davon abgesehen gibt es Web-Worker, die Ihnen ein akteursbasiertes Framework für die Ausführung von Operationen mit mehreren Verarbeitungsarten bieten. Sie können Mitarbeiter erstellen und Daten über Ereignisse hin und her übertragen.
BEARBEITEN: Der andere Grund ist, dass JavaScript bei der Erstellung so erstellt wurde, dass davon ausgegangen wurde, dass es für kleine Aufgaben verwendet wird, sodass keine Parallelität eingebaut wurde. Zum Nachrüsten würde jetzt viel Code beschädigt. Durch das Hinzufügen von Web-Workern war es möglich, ein System zu haben, in dem es Parallelität ohne gemeinsamen Speicher gibt, aber durch die Verwendung von Akteuren ein Modell der Parallelität, das sich in einer Reihe anderer Sprachen wie Erlang, Scala und Clojure als sehr robust erwiesen hat usw.
(WENN Sie nicht sagen können, dass ich sperrenbasierte Parallelität wirklich nicht mag)
quelle
Multi threading is one of the hardest things in software to get right.
- Ich bin nur überrascht! Der von Ihnen verwendete Browser, das Betriebssystem Ihres Desktops, der Webserver, der diese Seite bedient - praktisch jede Anwendung, die Sie täglich verwenden, ist Multithread-fähig. Sind Sie sicher, dass Sie es meinen? Noch um dich herabzustimmen, aber ich werde es tun, wenn du sagstmultithreading is not done because it is hard
Das Öffnen von Javascript für Multithreading führt zu mehr Problemen als es löst:
Die aktuelle Architektur ist ereignisbasiert mit einem Thread (wird häufig im GUI-Thread ausgeführt). Mit anderen Worten, Sie können sicher sein, dass sich mit jedem Codeblock von Anfang bis Ende nichts in der Umgebung ändert, außer was geändert wird im Code.
Sobald Sie die Preemption oder parallele Ausführung zulassen, ist diese Funktion nicht mehr verfügbar. Dies bedeutet, dass Sie Sperren auf Daten anwenden müssen, die Sie mutieren möchten, und dass Sie die gesamten schwer zu debuggenden Race-Bedingungen vermeiden müssen
Es ist möglich, eine pseudo-parallele Ausführung mit Zeitüberschreitungen durchzuführen. Dies bedeutet, dass große oder lange laufende Funktionen in atomare Blöcke aufgeteilt und verwendet werden,
setTimeout(function(){nextstep(args);},1);
damit bei Bedarf andere Dinge ausgeführt werden könnenquelle
Intel hat vor einiger Zeit River Trail veröffentlicht , das die parallele Programmierung in Javascript ermöglicht. Es ist jedoch nur ein Firefox-Plugin und ich habe noch nichts von einer Roadmap gehört, die diese Technologie in W3C bringt, geschweige denn in ECMA.
quelle