关于javascript:console.log是原子的吗?

Is console.log atomic?

Python中的print语句不是线程安全的。在Node.js中同时使用console.log是否安全?

如果是这样,那么它也是交错安全的吗?也就是说,如果多个(甚至数百个)回调写入控制台,我可以确定输出不会被破坏或交错吗?

看看源代码,似乎Node.js将并发尝试写入队列(在此处)排队。另一方面,console.log的替换标志来自printf(3)。如果console.logpackage在printf周围,则可以交错POSIX机器上的输出(如下所示)。

在回答此问题时,请告诉我async ._write(chunk, encoding, cb)在Node.js内部实现的位置。

编辑:如果可以同时写入流很好,那么为什么这个np??m包存在?


node.js中的所有内容基本上都是"原子的"。那是因为node.js是单线程的,所以任何代码都不能被中断。


nodejs的事件循环是单线程,但是nodejs的所有异步调用都是多线程的,它在后台使用libuv,libuv是使用多线程的库。

链接:
https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c


基于我在Node.js控制台上看到的内容,它不是" interleave-safe \\"。

我可以看到我的控制台输出有时是"断断续续的"或"交错的"。不总是。当我运行程序时,可能每隔5次就会看到来自多个日志语句的交错输出。

这当然取决于您的Node.js版本和运行它的操作系统。作为记录,我的Node.js版本是v12.13.0,操作系统是Windows 10.0.19042。