mysql - node.js - 代码执行路径的精度

标签 mysql node.js asynchronous io

我一直在读到,node.js 是单线程且同步的。但是,I/O 请求是异步执行的 [1] .

我有一个问题。给出以下代码片段:

c.query(  //#1
'SELECT SLEEP(20);',  //#2
    function (err, results, fields) {
      console.log("query executed"); //#3
    }
);
console.log("hello"); //#4

假设队列中有 2 个请求。我的理解是这样的:第一个请求就是这条路径#1->#2->#4->#3。之后处理第二个请求。

从我读到的内容来看,作者似乎在暗示#1->#2->#4。由于 #3 是异步的(等待 I/O),因此同时处理第二个请求。

有人可以澄清一下吗?谢谢。

最佳答案

Node.js 事件流基于异步回调。

这样,即使 Node.js 是单线程的,当您调用带有回调的函数时,该函数也会被异步调用,而不会阻塞同步代码的执行。

在您插入的示例中,您可以看到查询函数接受回调作为最后一个参数。一旦被调用,Node.js 就会发送事件流上的执行,并继续执行下一行代码。

为了澄清,在该示例中没有 #2 路径,'SELECT SLEEP(20);' 是查询函数的第一个参数。第二个参数是查询函数返回结果时执行的回调函数function (err, results, fields) {}

流程将为#1->#3->#2:

c.query('SELECT SLEEP(20);',//#1
    function (err, results, fields) {
        console.log("query executed"); //#2
    }
);
console.log("hello"); //#3

关于mysql - node.js - 代码执行路径的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847274/

相关文章:

mysql - 带条件选择的子查询

php - SQL,PHP - 如何选择标题和当前标题的所有子标题?

node.js - 为什么 Node.js 是用 C/C++ 编程语言编写的?

javascript - 当有 OnGoing Request 时如何处理连接切换?

javascript - 如何在问号后获取url中的变量输入(Javascript)

c# - 试图理解 C# 中的异步/等待

php - 需要有关 mysql/php 输出数据的帮助

mysql - SQL中的KEY是什么意思?

asynchronous - poll/epoll 会阻塞吗?它与异步 IO 有何不同?

javascript - VueJS 异步组件数据和 promise