2015-11-18 7 views
5

Ich habe immer gedacht, dass Web-Arbeiter separate Threads erstellen, aber heute lief ich in der Spezifikation auf w3c Website. Im Folgenden finden Sie ein Zitat über Web Worker:Web Worker - erstellen sie tatsächliche Threads?

Dies ermöglicht Thread-ähnlichen Betrieb mit Message-Passing als Koordinationsmechanismus.

Die Frage ist - wenn es fadenartige ist, nicht unbedingt der Faden, was ein Vorteil (Leistungs weise), diese Technologie zu verwenden?

Jede Hilfe wird geschätzt!

+0

Die angenommene Antwort ist irreführend. Siehe meine Antwort. – slebetman

Antwort

2

Ja, Web-Arbeiter erstellen tatsächliche Threads (oder Prozesse, die Spezifikation ist flexibel auf diese). Gemäß der Web Workers Spezifikation, wenn ein Arbeiter den ersten Schritt erzeugt wird, ist:

  1. Erstellen einer separaten parallelen Ausführungsumgebung (dh ein separater Thread oder Prozess oder äquivalente Konstrukt) und die restlichen Schritte ausführen in diesem Zusammenhang.

    Für die Zwecke der API-Timing ist dies der offizielle Moment der Erstellung des Arbeiters.

(W3C Web Worker Spezifikation Abschnitt 4,4)

So ist es ausdrücklich, dass Code angegeben in Web Worker laufen laufen in tatsächlichen Threads oder Prozesse.

Obwohl es möglich ist, Workers ohne Threads (beachten Sie die "Equivalent Construct" -Sprache) für Systeme zu implementieren, die Threads nicht unterstützen, implementieren alle Browserimplementierungen Web Workers als Threads.

1

Nach MDN,

Web Workers sind ein Mechanismus, durch den ein Skript Operation vorgenommen werden kann, in einem Hintergrund-Thread getrennt von dem Hauptausführungsthread einer Web-Anwendung auszuführen. Dies hat den Vorteil, dass die mühsame Verarbeitung in einem separaten Thread ausgeführt werden kann, sodass der Hauptthread (normalerweise der UI) ohne Blockierung/Verlangsamung ausgeführt werden kann.

So erstellt jeder Worker keinen separaten Thread, aber alle Worker werden in einem einzelnen separaten Thread ausgeführt.

Ich denke, wie nur in anderen Dingen, die Implementierung und Vorgehensweise kann von Browser zu Browser abweichen.

+0

Also, erstellen Web-Arbeiter tatsächliche Threads? – andrey

+1

@andrey Es sieht so aus als ob sie es nicht tun. –

+1

Ich denke, diese Antwort ist nur eine mögliche Interpretation des MDN-Inhalts. Es ist nicht klar von * Hintergrund Thread getrennt von der Hauptausführung Thread * bezieht sich auf Thread pro 'Worker' Instanz oder Thread pro Browser-Prozess. Beide Interpretationen sind jedoch möglich. –

1

Ein Web-Arbeiter läuft in einem einzigen Thread aus dem Hauptthread isoliert, wie sie Nachrichten um passieren ist fadenartige und arbeitet unterschiedlich, je nachdem, ob Sie dedizierte verwenden (nur aus dem Skript zugegriffen werden, die erstellt es) oder freigegeben (kann von jedem Skript innerhalb der gleichen Domäne über ein Port-Objekt zugegriffen werden) Worker.

EDIT: Aktualisierte Antwort, um meinen Kommentar von Monaten zu reflektieren. Während ein einzelner Web-Worker in einem isolierten Thread ausgeführt wird, bedeutet dies nicht, dass jeder zusätzliche Worker in demselben Thread ausgeführt wird.

+0

Danke! Ist dieser "einzelne isolierte Thread" nur für Web-Arbeiter gedacht? Vom UI-Thread trennen? – andrey

+0

@Dontfeedthecode tut einzelne isolierte Thread bedeuten, es gibt nur einen Thread für alle Arbeiter? –

+0

@Dontfeedthecode Die Verwendung mehrerer Arbeiter hat also keinen Vorteil. –