Javascript console.log是原子的吗?
Python中的Javascript console.log是原子的吗?,javascript,node.js,multithreading,parallel-processing,Javascript,Node.js,Multithreading,Parallel Processing,Python中的print语句不是线程安全的。在Node.js中同时使用console.log安全吗 如果是这样,那么它也是安全的吗?也就是说,如果有多个(甚至数百个)回调写入控制台,我可以确保输出不会被阻塞或交错吗 查看源代码,Node.js似乎将写入流()的并发尝试排队。另一方面,console.log。如果console.log环绕printf,则可以在POSIX机器上交错输出() 请告诉我您在回答这个问题时Node.js的内部位置 编辑:如果可以同时写入流,那么为什么会存在呢?node.
print
语句不是线程安全的。在Node.js中同时使用console.log
安全吗
如果是这样,那么它也是安全的吗?也就是说,如果有多个(甚至数百个)回调写入控制台,我可以确保输出不会被阻塞或交错吗
查看源代码,Node.js似乎将写入流()的并发尝试排队。另一方面,console.log
。如果console.log
环绕printf
,则可以在POSIX机器上交错输出()
请告诉我您在回答这个问题时Node.js的内部位置
编辑:如果可以同时写入流,那么为什么会存在呢?node.js中的所有内容基本上都是“原子的”。这是因为node.js是单线程的-没有代码可以被中断。nodejs的事件循环是单线程的,但是nodejs的所有异步调用都是多线程的,它在后台使用libuv,libuv是使用多线程的库 链接:
根据我在Node.js控制台上看到的情况,它不是“交错安全的” 我可以看到我的控制台输出有时是“阻塞的或交错的”。不总是这样。当我运行我的程序时,可能每5次我都会看到来自多个日志语句的交叉输出
当然,这可能取决于Node.js版本和运行它的操作系统。作为记录,我的Node.js版本是v12.13.0,操作系统是Windows 10.0.19042。注意;在浏览器中,
console.log
object求值延迟存在问题。看见不过,这不应该影响node.js应用程序。有人能解释一下,node怎么可以是单线程的,而且仍然来自回调地狱吗?我是说。。你的意思是,尽管可能有2000次回调,但每次只执行其中一次,直到它被非CPU限制的操作完成或阻止为止?@Andrepena:是的,任何时候都只执行其中一次,但所有2000次回调都可以并行等待。这就是并发的含义——代码可以并行等待而不执行。并发!=parallelism.OK,但是“原子”是按字符写的吗?用新线?另外,请看我的编辑,因为你回答了这个问题。我从理论上理解你的意思,但我需要更深入的解释。@andrerpena:这里是我之前写的两个解释体系结构的答案:,Node.js是单线程的。回调可能来自不同的线程,但一旦它们进入主线程,就没有并发的。