ist Javascript Multithreading möglich mit IFRAMEs

9

Ich spiele gerade mit der Idee, IFRAMEs zu verwenden, um eine sehr einfache Multithreading-Engine zu implementieren. Meine ersten Ergebnisse zeigen mir jedoch, dass das Ausführen in Threads langsamer ist als das Ausführen in einem einzelnen Thread.

Mein Test ist:

Einfacher Thread

%Vor%

Mehrere Threads

%Vor%

Wie zu sehen ist, teile ich nur die Arbeitslast unter IFRAMEs auf (der obige Code dient nur dazu, ein besseres Bild von dem zu geben, was ich mache, es funktioniert nicht).

Also ich denke, dass selbst mit FRAMEs FireFox immer noch nur eine JS-Engine hat? Ist diese Annahme richtig? (meine Forschung dumm zu machen), sind andere Browser anders?

Machen Sie einen schnellen googles Ich habe diesen Artikel: Ссылка

Allerdings sind die hier erzielten Leistungsverbesserungen mehr als wahrscheinlich, nur parallele http-Anfragen statt der Verarbeitungsleistung zu erledigen.

Danke für Ihre Einsichten.

Guido

    
gatapia 31.12.2009, 02:41
quelle

5 Antworten

3

Sehen Sie sich den HTML5 Web Workers Standard an, um zu sehen, wie JavaScript-Threads aussehen sollten. Dies ist in Firefox 3.5, Safari 4 und Chrome 3 implementiert, aber nicht in IE. Wenn Sie ein Plug-in für IE-Nutzer und ältere Browser benötigen, lesen Sie den Google Gears-WorkerPool .

    
Annie 31.12.2009 03:29
quelle
0

Nein, Javascript unterstützt im Allgemeinen kein Multithreading. Die meisten Interpreter haben keine Multi-Threading-Funktionen (genau wie PHP), wahrscheinlich aus Gründen der Portabilität.

Da jedoch die Rhino -Engine vollständig in Java geschrieben ist, kann die Thread-Klasse anzapfen , aber das wäre nur machbar, wenn Sie serverseitiges JavaScript machen.

    
Josh Stodola 31.12.2009 02:56
quelle
0

Ich habe mich für eine Browser-abhängige Lösung entschieden. Grundsätzlich verwende ich Workers , falls verfügbar, dann Zahnräder falls verfügbar. Endlich nur single threaded.

Danke allen

Guido

    
gatapia 31.12.2009 04:19
quelle
0

setTimeout kann unter Umständen eine gute Lösung sein.

Es hängt davon ab, was Sie einen Thread nennen. Nein, dies wird keine Last auf andere Cores verteilen, aber es ist Multithreading, da der Thread für den Prozess an einen anderen Prozess im Code übergeben wird. Teilen Sie Ihre schweren Zyklen in Blöcke und lassen Sie sich die Rendering-Engine und andere Ereignisse ansehen.

    
thomas-peter 28.12.2013 13:54
quelle
-1

Sie könnten versuchen, Ihre Operationen in einen setTimeout-Aufruf einzufügen.

    
Jonathan S. 31.12.2009 03:03
quelle

Tags und Links