Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Multithreading node.js如何知道调用是否必须在线程池或事件循环中执行?_Multithreading_Node.js_Architecture_Asynchronous - Fatal编程技术网

Multithreading node.js如何知道调用是否必须在线程池或事件循环中执行?

Multithreading node.js如何知道调用是否必须在线程池或事件循环中执行?,multithreading,node.js,architecture,asynchronous,Multithreading,Node.js,Architecture,Asynchronous,我读到node.js同时使用踏板和事件循环 我很想知道它是如何处理回电话的。。。它是否由EventEmitter指定(工程师是否知道它是否将被阻塞) 还是在运行时选择它的核心本身? 如果是这个,它如何检测它是异步运行还是线程运行 我已经阅读了很多参考资料,但是我没有找到这方面的内容。IM阅读源代码,但它很难,因为它是很多时间以来,我最后一次编码与C++。 谢谢你的JavaScript代码总是在一个线程中运行。这是因为V8 JavaScript引擎不是线程安全的 但是,作为一些C++代码的实现细节

我读到node.js同时使用踏板和事件循环

我很想知道它是如何处理回电话的。。。它是否由EventEmitter指定(工程师是否知道它是否将被阻塞)

还是在运行时选择它的核心本身? 如果是这个,它如何检测它是异步运行还是线程运行

我已经阅读了很多参考资料,但是我没有找到这方面的内容。IM阅读源代码,但它很难,因为它是很多时间以来,我最后一次编码与C++。
谢谢你的JavaScript代码总是在一个线程中运行。这是因为V8 JavaScript引擎不是线程安全的

但是,作为一些C++代码的实现细节,可能有线程。例如,假设您编写了一些连接到数据库的JavaScript代码。您的JavaScript代码当然是异步的,就像任何好的节点代码一样。但是异步编码在C/C++世界中非常少见,因此数据库供应商可能没有编写异步C/C++API

所以,当有人正在编写一个节点包用于数据库访问时,他们必须编写一个垫片,它适应于“阻塞”C++行为和“非阻塞、事件驱动”节点行为。在调用“连接”方法时,这会指向生成新线程的C++代码,并且该线程向数据库发出(阻塞)“连接”调用,这会阻塞线程直到连接完成。然后C++代码将“连接完成”传递回事件队列,下次主(JavaScript)线程轮询事件队列时,回调将被触发。


因此,是的,有线程,但它们的使用应该对您完全透明。当您在用JavaScript编写Node.js代码时,您不需要担心线程——您只需要关心应该发生的事情。包作者可以使用线程,但这纯粹是一个实现细节,您不必担心它。您的JavaScript代码从不显式使用线程。

您的JavaScript代码始终在单个线程中运行。这是因为V8 JavaScript引擎不是线程安全的

但是,作为一些C++代码的实现细节,可能有线程。例如,假设您编写了一些连接到数据库的JavaScript代码。您的JavaScript代码当然是异步的,就像任何好的节点代码一样。但是异步编码在C/C++世界中非常少见,因此数据库供应商可能没有编写异步C/C++API

所以,当有人正在编写一个节点包用于数据库访问时,他们必须编写一个垫片,它适应于“阻塞”C++行为和“非阻塞、事件驱动”节点行为。在调用“连接”方法时,这会指向生成新线程的C++代码,并且该线程向数据库发出(阻塞)“连接”调用,这会阻塞线程直到连接完成。然后C++代码将“连接完成”传递回事件队列,下次主(JavaScript)线程轮询事件队列时,回调将被触发。


因此,是的,有线程,但它们的使用应该对您完全透明。当您在用JavaScript编写Node.js代码时,您不需要担心线程——您只需要关心应该发生的事情。包作者可以使用线程,但这纯粹是一个实现细节,您不必担心它。您的JavaScript代码从不显式使用线程。

您在哪里读到Node.js使用线程的?您的代码都在一个线程中运行(部分原因是V8 JavaScript引擎不是线程安全的)。这就是为什么在编写代码时不需要担心诸如关键部分之类的问题。在这里你可以阅读。引用:“当然,在后端,有用于DB访问和进程执行的线程和进程。”[…]啊,我明白了。我会根据上下文写一个答案。你在哪里读到Node.js使用线程的?您的代码都在一个线程中运行(部分原因是V8 JavaScript引擎不是线程安全的)。这就是为什么在编写代码时不需要担心诸如关键部分之类的问题。在这里你可以阅读。引用:“当然,在后端,有用于DB访问和进程执行的线程和进程。”[…]啊,我明白了。我会根据上下文写一个答案。很好的答案!我认为是节点本身的核心以异步或线程池的形式执行Javascript代码,我错了。现在我明白了。谢谢回答得好!我认为是节点本身的核心以异步或线程池的形式执行Javascript代码,我错了。现在我明白了。谢谢