2016-08-10 2 views
2

Die print-Anweisung in Python ist nicht Thread-sicher. Ist es sicher, console.log in Node.js gleichzeitig zu verwenden?Ist console.log atomar?

Wenn ja, ist es auch Interleave-sicher? Das heißt, wenn mehrere (sogar Hunderte) Callbacks auf die Konsole schreiben, kann ich sicher sein, dass die Ausgabe nicht verfälscht oder verschachtelt wird?

Mit Blick auf den Quellcode scheint Node.js gleichzeitige Versuche in einen Stream zu schreiben (here). Auf der anderen Seite console.logsubstitution flags come from printf(3). Wenn console.log um printf wraps, dann kann dies die Ausgabe auf POSIX-Maschinen verschachteln (as shown here).

Bitte zeigen Sie mir, wo die async ._write(chunk, encoding, cb) is implemented innerhalb Node.js in Ihrer Antwort auf diese Frage.

EDIT: Wenn es in Ordnung ist, gleichzeitig in einen Stream zu schreiben, warum gibt es dann this npm package?

+0

Node.js ist single threaded. Callbacks können aus verschiedenen Threads stammen, aber sobald sie in den Hauptthread eintreten, ist nichts gleichzeitig. – 4castle

Antwort

4

Alles in node.js ist im Grunde "atomar". Das liegt daran, dass node.js single threaded ist - kein Code kann jemals unterbrochen werden.

+0

Hinweis obwohl; Es gibt Probleme mit der Auswertung von "console.log" -Objekten in Browsern. Siehe http://stackoverflow.com/questions/4057440/is-chromes-javascript-console-lazy-about-evaluating-arrays. Sollte sich jedoch nicht auf node.js-Apps auswirken. – Jacob

+0

Kann jemand bitte erklären, wie Node single-threaded und immer noch von Callback-Hölle sein kann? Ich meine .. Was Sie sagen ist, dass, obwohl es 2000 Rückrufe geben kann, nur einer von ihnen auf einmal ausgeführt wird, bis es fertig ist oder durch eine nicht-CPU-gebundene Operation blockiert? –

+2

@andrerpena: Ja, nur einer von ihnen wird zu jeder Zeit ausgeführt, aber alle 2000 können parallel WARTEN. Das bedeutet, dass Nebenläufigkeit bedeutet, dass der Code parallel WARTEN kann, ohne ausgeführt zu werden. Parallelität! = Parallelität. – slebetman