我一直在读到,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/