Parallel JS landet im Entwicklungszweig von Firefox.
Parallel JS landet im Entwicklungszweig von Firefox. (Bild: Niko Matsakis)

Parallel JS Javascript wird multithreaded

Javascript wird üblicherweise in einem Thread ausgeführt. Blockiert eine Funktion diesen, müssen alle anderen warten, auch wenn andere CPU-Kerne nichts zu tun haben. Parallel JS soll das ändern und dafür sorgen, dass Javascript Multi-Core-Prozessoren effizient nutzt.

Anzeige

Firefox erhält als erster Browser Funktionen zur parallelen Verarbeitung von Javascript in mehreren Threads, wie Mozilla-Entwickler Niko Matsakis schreibt, der zusammen mit Kollegen an Parallel JS arbeitet. Bei dem Forschungsprojekt geht es darum, Ansätze zu finden, um Javascript parallel in mehreren Threads ausführen zu können. Ein erster großer Patch dazu wurde jetzt in den Entwicklungszweig von Firefox aufgenommen.

Der Ansatz ist nicht mit dem von Webworkern zu verwechseln, die Entwicklern schon länger erlauben, Javascript-Funktionen in einem zusätzlichen Thread auszuführen. Vielmehr setzt Parallel JS Webworker voraus, denn bei Parallel Js erzeugt ein Javascript-Worker mehrere Child-Tasks, stellt dann seine Arbeit ein und nimmt sie erst wieder auf, wenn die "Kinder" ihre Ergebnisse zurückgelegt haben. Da es keine gute Idee wäre, den UI-Thread des Browsers anzuhalten, lässt sich Parallel JS nur innerhalb von Webworkern nutzen.

Entwickler sollen sich um die eigentliche Parallelisierung nicht kümmern müssen. Stattdessen sollen ihnen neue APIs zur Verfügung gestellt werden, die dann intern parallel arbeiten.

Ein Beispiel dafür ist Parallelarray: Dieses stellt ähnliche Funktionen wie ein Array-Objekt bereit die aber parallel abgearbeitet werden. Der Vorteil: Mehrere CPU-Kerne können Berechnungen auf unterschiedlichen Teilen eines solchen Parallelarray gleichzeitig ausführen. Der Nachteil: Es lässt sich nicht vorhersagen, in welcher Reihenfolge die Aktionen ausgeführt werden.

Dabei setzten die Parallel-JS-Entwickler mittlerweile auf einen als "Self-Hosted" beschriebenen Ansatz. Statt die neuen Funktionen der Javascript-Engine in C++ zu implementieren, werden diese Teile der Javascript-Engine selbst in Javascript implementiert. Das macht die Implementierung deutlich einfacher, da viele Sonderbehandlungen, die in C++ durchgeführt werden, so von der Javascript-Engine automatisch vorgenommen werden müssen. Zwar gilt C++ im Vergleich zu Javascript als schneller, doch das gelte nur, wenn dabei C++-Datenstrukturen verarbeitet würden, so Matsakis. Da die Datenstrukturen in Javascript aber zum Teil deutlich komplexer sind, greift der C++-Code oft auf sehr allgemeine Helferfunktionen zurück. So kommt es dazu, dass eine in C++ geschrieben Funktion deutlich langsamer sein kann als eine entsprechende Javascript-Funktion, die vom Just-in-Time-Compiler verarbeitet wird.

Aktueller Firefox-Patch ist erst der Anfang

Der jetzt in den Entwicklungszweig von Firefox integrierte Code stellt allerdings nur eine Art ersten Entwurf in Sachen Parallel JS dar, das Projekt selbst ist schon etwas weiter. Der Code unterstützt derzeit nur kleine Teile von Javascript und es gibt keine Anhaltspunkte, um festzustellen, ob der eigene Code parallel ausgeführt wurde oder nicht. Auch wurde der Code noch nicht optimiert, so dass die parallele Ausführung manchmal sogar langsamer sein kann als die sequentielle Ausführung.

Mittelfristig soll Parallel JS in der Lage sein, einfachen Javascript-Code, Matsakis spricht von "plain vanilla Javascript", parallel auszuführen. Was unter "plain vanilla" konkret zu verstehen ist, gilt es aber noch herauszufinden. Ein wesentlicher Aspekt wird aber sein, dass der entsprechende Code nur mit Javascript-Objekten arbeitet und nicht mit DOM-Objekten interagiert.

Langfristig geht es Matsakis darum, Parallelität so einfach und omnipräsent zu machen wie möglich. Es soll eine Vielzahl paralleler APIs für unterschiedliche Situationen geben und Code soll parallel und effizient in mehreren Browsern laufen. Matsakis geht davon aus, dass sich die APIs bis dahin noch verändern werden. Beispielswiese wird diskutiert, vorhandene Typen wie Array um neue Methoden zu erweitern, statt einen neuen Typ wie Parallelarray einzuführen.

Matsakis hat in den vergangenen Monaten viele Ideen und Konzepte zu Parallel JS in seinem Blog Baby Steps erläutert. Zudem hat er den ersten Teil einer Serie an Blogeinträgen zur Implementierung von Parallel JS veröffentlicht.


bassfader 22. Mär 2013

Es ging mir darum dass du sagst die Sprache sollte - für die breite Masse - native...

Breni 22. Mär 2013

Haha. XD Ich habe bis jetzt nur Erfahrung mit "Webseiten-JS". Welche Dimensionen...

doodie 22. Mär 2013

Goto gibt's z.B. auch in C#. Oder in .NET allgemein, denn IL Code ist voll von Goto...

Gruselgurke 22. Mär 2013

Aha, weil Seiten wie eBay, Yahoo und linkedin so unglaublich schlechte programmierer...

gorsch 22. Mär 2013

Der Unterschied besteht darin, dass mehrere Threads gleichzeitig von unterschiedlichen...

Kommentieren



Anzeige

  1. Software Developer with Focus on Application Development (m/w)
    OMICRON electronics GmbH, Klaus (Österreich)
  2. Anwendungs- und Softwareberater/in webbasierte Applikationen
    Robert Bosch GmbH, Stuttgart-Feuerbach
  3. (Senior) Inhouse Consultant for Project Management Solutions (m/w)
    Bombardier Transportation, Berlin
  4. Referatsleiterin / Referatsleiter Informatik
    Der Hessische Datenschutzbeauftragte, Wiesbaden

 

Detailsuche


Blu-ray-Angebote
  1. Game of Thrones - Staffel 4 (Digipack + Bonusdisc) (exkl. bei Amazon.de) [Blu-ray] [Limited Edition]
    44,99€ - Release 26.03.
  2. 2001: Odyssee im Weltraum (Steelbook) (exklusiv bei Amazon.de) [Blu-ray] [Limited Edition]
    14,99€
  3. NEU: Winters Tale [Blu-ray]
    8,97€

 

Weitere Angebote


Folgen Sie uns
       


  1. Zend

    Experimentelle JIT-Engine für PHP veröffentlicht

  2. Jolla Tablet im Hands on

    Sailfish OS funktioniert auch auf dem Tablet

  3. Imagination Technologies

    Winzige Wearable-GPU und H.265-Einheiten für Smartphones

  4. Biometrie

    Fujitsu zeigt Iris-Scanner mit NIR-Licht für Smartphones

  5. Industrie 4.0

    Brüssel, höre die digitalen Signale!

  6. Gamedesign

    Fiese Typen in Spielen

  7. Mozilla

    Firefox OS will auch in Industriestaaten auf den Billigmarkt

  8. Sony Xperia Z4 Tablet im Hands on

    Gespenstisch leicht

  9. 14-nm-Fertigung

    Qualcomms Snapdragon 820 nutzt die neue Kryo-Architektur

  10. MIPS Creator CI20 angetestet

    Die Platine zum Pausemachen



Haben wir etwas übersehen?

E-Mail an news@golem.de



Galaxy S6 und Edge-Variante: Samsungs neue Top-Smartphones im Glaskleid
Galaxy S6 und Edge-Variante
Samsungs neue Top-Smartphones im Glaskleid
  1. Exynos 7 Octa Schneller Prozessor des Galaxy S6 wird in 14 nm gefertigt
  2. Qualcomm-Prozessor LG widerspricht Hitzeproblemen beim Snapdragon 810
  3. Hitzeprobleme Galaxy S6 erscheint ohne Qualcomms Snapdragon 810

Test USB 3.1 mit Stecker Typ C: Die Alleskönner-Schnittstelle
Test USB 3.1 mit Stecker Typ C
Die Alleskönner-Schnittstelle
  1. Mit Stecker Typ C Asrock stattet Intel-Mainboards mit USB-3.1-Karte aus
  2. Datentransfer Forscher schicken 100 GBit/s per Lichtstrahl durch die Luft
  3. USB 3.1 Richtig schnelle Mangelware

Nachruf: Dif-tor heh smusma, Mr. Spock!
Nachruf
Dif-tor heh smusma, Mr. Spock!
  1. Virtuelle Realität Oculus VR kauft Ingenieure fürs Holodeck

  1. Re: Overlord

    HanseDavion | 16:04

  2. Re: S6 vs S5

    Bouncy | 16:04

  3. Re: Der totale Überwachungsstaat

    tingelchen | 16:03

  4. Re: keine Bestellplattform

    Hotohori | 16:02

  5. Re: Eigentlich gut, was noch fehlt

    Trollversteher | 16:02


  1. 15:58

  2. 15:57

  3. 15:42

  4. 15:21

  5. 14:55

  6. 14:21

  7. 13:35

  8. 12:47


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel