繁体   English   中英

console.log 是原子的吗?

[英]Is console.log atomic?

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

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

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

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

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

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 控制台上看到的内容,它不是“交错安全”。

我可以看到我的控制台输出有时被“破坏或交错”。 并非总是如此。 当我运行我的程序时,我可能每 5 次看到多个日志语句的交错输出。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM