Python中的print
语句不是线程安全的。同时在Node.js中使用console.log
是否安全?
如果是这样,那么它也是交错安全的吗?也就是说,如果多个(甚至数百个)回调写入控制台,我可以确定输出不会被破坏或交错吗?
查看源代码,似乎Node.js将并发尝试写入流(here)。另一方面,console.log
的{{3}}。如果console.log
包裹printf
,则可以在POSIX计算机(substitution flags come from printf(3)
)上交错输出。
请在回答此问题时告诉我Node.js中as shown here的位置。
编辑:如果可以同时写入流,那么为什么async ._write(chunk, encoding, cb)
is implemented存在?
答案 0 :(得分:4)
node.js中的所有内容基本上都是“原子的”。那是因为node.js是单线程的 - 没有代码可以被中断。
答案 1 :(得分:0)
nodejs的事件循环是单线程,但是nodejs的所有异步调用都是多线程的,它在后台使用libuv,libuv是使用多线程的库。
答案 2 :(得分:0)
根据我在 Node.js 控制台上看到的内容,它不是“交错安全”的。
我可以看到我的控制台输出有时被“破坏或交错”。不总是。当我运行我的程序时,我可能每 5 次看到多个日志语句的交错输出。
这当然取决于您的 Node.js 版本和运行它的操作系统。作为记录,我的 Node.js 版本是 v12.13.0,操作系统是 Windows 10.0.19042。