Frage

Grüße,

Ich habe JavaScript, Nodejs, studiert. Und ich verstehe nicht, wie die Problemen mit Parallelität in JavaScript vermieden werden.

Nehmen wir an, ich arbeite an einem Objekt

var bigObject = new BigObject();

Und ich habe eine setTimer(function(){ workOnBigOjbect...} ) Das wird auch arbeiten bigOjbect.

Wenn ich einen Festplatten habe, wird ich in geschrieben bigObject, und ein Timerobjekt, an dem arbeitet bigObject, und regelmäßig Code -Lesen aus bigObject, Wie werden Parallelitätsprobleme vermieden?

In einer regulären Sprache würde ich ein Muster für MUTEX- oder Thread-Safe-Warteschlangen/Befehlsmuster verwenden. Ich sehe auch nicht viel Diskussion über Rassenbedingungen für JavaScript.

Vermisse ich etwas?

War es hilfreich?

Lösung

Der springende Punkt von Node.js ist, dass es ereignisgesteuert ist. Der gesamte Code wird in Ereignishandlern in einem einzigen Thread ausgeführt. Es gibt keine Problemen mit Parallelität, da der Code nicht gleichzeitig ausgeführt wird. Der Nachteil ist, dass jeder Ereignishandler schnell beenden muss, da er die anderen Ereignisse blockiert.

In Ihrem Beispiel startet der Code die Festplatte IO und beendet sofort. Die Node.js -Infrastruktur informiert das Programm, dass der IO -Betrieb durch Ausführen eines Event -Handlers ausgeführt wurde. Das Timer -Ereignis wird vor oder nach dem IO -Ereignis gerufen, aber nie gleichzeitig.

Andere Tipps

JavaScript ist Single-Threaded. Wenn die Zeit eintrifft, wenn Ihre Funktion ausgeführt werden soll (basierend auf dem Aufrufen von SetTimer) und der übergeordnete Code noch ausgeführt wird, wird die Funktion erst ausgeführt, wenn der übergeordnete Code abgeschlossen ist.

Es gibt nur einen einzelnen Thread; sehen: Node.js auf Multi-Core-Maschinen

Ich würde spekulieren, dass dies daran liegt, dass in der zugrunde liegenden V8 -JavaScript -Engine mehrere Threads nicht unterstützt werden, da JavaScript normalerweise innerhalb eines Browsers ausgeführt wird (wobei in einem Windows -Fall nur ein einziger UI -Thread vorhanden ist) und nicht mehrere Threads unterstützt.

Es wird dieses Ding in JavaScript genannt Durchführung Dies stellt sicher, dass, wenn ein Code ihn ausführt, vollständig vor einem anderen (asynchronen) Code ausgeführt wird, weshalb keine Parallelitätsprobleme.

Im Falle Ihres Beispiels, wenn der Timer-Rückruf genannt wird, wird er vollständig ausgeführt und wird niemals in der Mitte vorgegeben, um einen anderen Code auszuführen.

Sehen Warum kein Tool für die Kontrolle des Gleichzeitraums in JavaScript für mehr Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top