Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript console.log是原子的吗?_Javascript_Node.js_Multithreading_Parallel Processing - Fatal编程技术网

Javascript console.log是原子的吗?

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.

Python中的
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是单线程的。回调可能来自不同的线程,但一旦它们进入主线程,就没有并发的。