Erlaube dem Browser, mehr Kerne zu verwenden

2083
user584127

Ich habe einen Algorithmus mit JavaScript geschrieben. Wenn ich es in Google Chrome ausführe, dauert es ungefähr 30 Minuten, was ziemlich lang ist.
Wenn ich den Task-Manager während der Berechnung öffne, kann ich feststellen, dass Chrome etwa 25% meiner CPU beansprucht, also einen meiner 4 Kerne.

Kann ich zulassen, dass Chrome mehr von meinen CPUs verwendet, beispielsweise 3 von 4, damit die Berechnung schneller ausgeführt wird?

PS: Es macht mir nichts aus, einen anderen Browser (zB Firefox) zu verwenden, falls Chrome dies nicht unterstützt.

1

1 Antwort auf die Frage

4
Brian Howell

Standard-JavaScript ist unithreading: Es kann nur ein Programm auf einer CPU (Core) ausgeführt werden.

Für das, was Sie beschreiben, müssten Sie Ihr Dataset wahrscheinlich in Blöcke aufteilen und einen separaten JavaScript-Web Worker erstellen, der Ihren Algorithmus ausführt, um jeden Block zu verarbeiten. Dies setzt voraus, dass Sie über ein strukturell einheitliches Dataset verfügen. (Achten Sie auf die Randbedingungen.)

Um Web Workers effektiv einsetzen zu können, müssen Sie wissen, wie Sie serielle Algorithmen als parallele und andere Aspekte der Multithread-Programmierung umschreiben. All dies erfordert fortgeschrittene Programmierkenntnisse.

JavaScript-Web-Worker sind unabhängige, unabhängige Ausführungseinheiten (Threads), die vom Hauptprogramm und voneinander getrennt und isoliert sind. Die Kommunikation zwischen dem Hauptprogramm und den Web Workern sowie zwischen den Web Workern selbst erfolgt über ereignisgesteuerte Datennachrichten.

Das Host-Betriebssystem kann einzelne Web Worker-Threads auf separaten Kernen ausführen, wodurch die CPU-Kapazität zu 100% genutzt werden kann.

Web Worker sind nur als Recheneinheiten gedacht. Sie haben keinen Zugriff auf das DOM oder auf DOM-bezogene Browserkomponenten, z. B. Fenster . (Dies vermeidet alle möglichen Probleme mit dem serialisierten Zugriff auf sie.) Daher muss die anzuzeigende Ausgabe von einem Worker an den Haupt-Thread zurückgegeben werden.

Alle aktuellen Browser bieten eine gewisse Unterstützung für Web Worker. Die Tabelle am Ende der Mozilla Web Worker API-Seite, https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API, zeigt die Unterstützung einzelner Browser und Versionen für die verschiedenen Web Worker-Funktionen.

Eine gute Einführung in Web Workers:

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