gpt4 book ai didi

javascript - 同步和异步编程有什么区别(在node.js中)

转载 作者:IT老高 更新时间:2023-10-28 13:15:39 26 4
gpt4 key购买 nike

我一直在阅读 nodebeginner我遇到了以下两段代码。

第一个:

    var result = database.query("SELECT * FROM hugetable");
console.log("Hello World");

第二个:

    database.query("SELECT * FROM hugetable", function(rows) {
var result = rows;
});
console.log("Hello World");

我明白他们应该做什么,他们查询数据库以检索查询的答案。然后是 console.log('Hello world').

第一个应该是同步代码。第二个是异步代码。

这两部分的区别对我来说很模糊。输出会是什么?

谷歌搜索异步编程对我也没有帮助。

最佳答案

不同的是,在第一个例子中,程序会在第一行阻塞。下一行 (console.log) 将不得不等待。

第二个示例中,console.log 将在处理查询时执行。也就是说,查询将在后台处理,而您的程序正在做其他事情,一旦查询数据准备好,您将随心所欲。

所以,简而言之:第一个示例会阻塞,而第二个不会。

以下两个例子的输出:

// Example 1 - Synchronous (blocks)
var result = database.query("SELECT * FROM hugetable");
console.log("Query finished");
console.log("Next line");


// Example 2 - Asynchronous (doesn't block)
database.query("SELECT * FROM hugetable", function(result) {
console.log("Query finished");
});
console.log("Next line");

应该是:

  1. 查询完成
    下一行
  2. 下一行
    查询完成

注意
虽然 Node 本身是单线程,但也有一些任务可以并行运行。例如,文件系统操作发生在不同的进程中。

这就是 Node 可以执行异步操作的原因:一个线程执行文件系统操作,而 Node 主线程继续执行您的 javascript 代码。在像 Node 这样的事件驱动服务器中,文件系统线程通知主 Node 线程某些事件,例如完成、失败或进度,以及与该事件相关的任何数据(例如数据库查询的结果或错误消息)并且主 Node 线程决定如何处理该数据。

您可以在此处阅读更多信息:How the single threaded non blocking IO model works in Node.js

关于javascript - 同步和异步编程有什么区别(在node.js中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16336367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com