zoukankan      html  css  js  c++  java
  • node.js在windows下的学习笔记(4)---同步,异步,回调的概念

    Node.js是使用事件驱动的,非阻塞的I/O模型,用于构建快速的,可扩展的网络应用程序。

    Node.js想解决的问题是:处理输入,输入,高并发

    1.阻塞与非阻塞

    阻塞也叫同步,是指每一次执行一个操作,在这个操作完成之前,代码的执行会被阻塞,无法移到下一个操作上。

    阻塞就相当于你在超市里面买东西,结账,在排队,如果前面的人没买单,你就不能买,一定要等前面的人先执行完其操作才可以

    非阻塞就相当于你在外婆家取号,然后就可以去干别的事情了,等轮到我们的时候,短信发到我们的手机上了,说轮到我们了,这样我们就可以回去吃饭了。

    function sleep(milliseconds) {
      var start = new Date().getTime();
      while ((new Date().getTime() - start) < milliseconds){
      }
    }
    
    function fetchPage() {
      console.log('fetching page');
      sleep(2000); // simulate time to query a database
      console.log('data returned from requesting page');
    }
    
    function fetchApi() {
      console.log('fetching api');
      sleep(2000); // simulate time to fetch from an api
      console.log('data returned from the api');
    }
    
    fetchPage();
    fetchApi();

    执行上面的代码结果如下:

    Node.js几乎不使用这种编码风格,而是异步地调用回调

    什么是回调呢?回调指的是将一个函数A作为参数传递给另一个函数B,并且通常在函数B完成后被调用。

                       1.异步地调用是由操作系统在后台进行相应的操作。

                       2.同步的代码会继续执行

                       3.当操作系统异步完成之后,调用回调函数来进行相应的结果展示

    var http = require('http')
    
    function fetchPage() {
      console.log('fetching page');
      http.get({ host: 'trafficjamapp.herokuapp.com', path: '/?delay=2000' }, function(res) {
        console.log('data returned from requesting page');
      }).on('error', function(e) {
        console.log("There was an error" + e);
      });
    }
    
    function fetchApi() {
      console.log('fetching api');
      http.get({ host: 'trafficjamapp.herokuapp.com', path: '/?delay=2000' }, function(res) {
        console.log('data returned from the api');
      }).on('error', function(e) {
        console.log("There was an error" + e);
      });
    }
    
    fetchPage();
    fetchApi();

    非阻塞(异步)的代码执行的结果如下:

    总结:

    同步:必须等待前面的一个程序运行结束,才能执行下一段陈新股的调用模式

    异步:一段异步代码,还未执行完,可以继续执行下一段代码的逻辑,当异步地代码执行完后,通过回调返回继续执行相应的逻辑。主要取决于代码的逻辑中有没有异步函数,如:setTimeout

    回调:回调不是异步调用,而是一种解决异步函数执行结果的处理方法

  • 相关阅读:
    python 协程
    python中基于descriptor的一些概念
    python remove del pop 的区别
    python 装饰器 和面向切面编程(AOP)
    python yield详解
    Python的列表推导式,字典推导式,集合推导式使用方法
    python 垃圾回收机制
    (5) etcd 介绍、经典适用场景、安装、配置、测试
    grafana 安装配置
    open-falcon 安装配置
  • 原文地址:https://www.cnblogs.com/michaeljunlove/p/3972053.html
Copyright © 2011-2022 走看看