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

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

我一直在读初学者我发现了以下两段代码。

第一项:

    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').

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

这两件作品之间的区别对我来说非常模糊。输出是什么?

在异步编程上谷歌搜索也帮不了我。


UYOU
浏览 1023回答 3
3回答

临摹微笑

不同之处在于第一个例子,程序将阻塞在第一行。下一行(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");将是:Query finishedNext lineNext lineQuery finished注而Node本身单螺纹,有些任务可以并行运行。例如,文件系统操作发生在不同的进程中。这就是Node可以执行异步操作的原因:一个线程正在执行文件系统操作,而主Node线程则一直在执行您的javascript代码。在像Node这样的事件驱动服务器中,文件系统线程通知主节点线程某些事件,如完成、失败或进度,以及与该事件相关的任何数据(例如数据库查询的结果或错误消息),主节点线程决定如何处理该数据。你可以在这里读到更多关于这一点的信息:单线程非阻塞IO模型是如何在Node.js中工作的

呼唤远方

这两种方法的区别如下:同步方式:它等待每个操作完成,然后只执行下一个操作。用于查询:console.log()除非查询已完成执行以获得数据库的所有结果,否则将不会执行命令。异步方式:它从不等待每个操作完成,而是只在第一步执行所有操作。一旦结果可用,将处理每个操作的结果。用于查询:console.log()命令之后不久将执行Database.Query()方法。数据库查询在后台运行并在完成检索数据后加载结果。用例如果您的操作不像查询来自DB的巨大数据那样需要进行非常繁重的工作,那么就继续使用同步方式,否则采用异步方式。在异步方式下,您可以向用户显示一些进度指示符,而在后台,您可以继续您的重量级工作。这是GUI应用程序的理想场景。

开满天机

如果在这两个示例中添加一行,这将变得更加清晰:var result = database.query("SELECT * FROM hugetable");console.log(result.length);console.log("Hello World");第二项:database.query("SELECT * FROM hugetable", function(rows) {    var result = rows;    console.log(result.length);});console.log("Hello World");尝试运行这些程序,您将注意到第一个(同步)示例将在“HelloWorld”行之前打印出结果.Length。在第二个(异步)示例中,将(很可能)在“HelloWorld”行之后打印结果.Length(很可能)。这是因为在第二个例子中,database.query在后台异步运行,脚本直接使用“HelloWorld”继续运行。这个console.log(result.length)只有在数据库查询完成时才执行。
打开App,查看更多内容
随时随地看视频慕课网APP