zoukankan      html  css  js  c++  java
  • Nodejs基础(5-6)HTTP概念进阶

    1、什么是回调? 是异步编程最基本的方法,对于nodejs来说需要按顺序执行异步逻辑的时候一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数逐层去嵌套。通过这种方式来让程序按照我们期望的方式走完整个流程。

    2、什么是同步/异步?同步就是执行一个任务,后一个任务等待前一个任务执行完再执行。程序的执行顺序和任务的排列顺序是一致的。浏览器中的js是单线程的,是按顺序执行的,虽然js文件可以并行下载,但是必须按顺序执行。如果js中有死循环,那么页面就会阻止在这里,后面的js也不会执行。

    js中的异步函数:setTimeOut setInterval

     1 var c = 0
     2 
     3 function printIt () {
     4     console.log(c)
     5 }
     6 function plus (callback) {
     7     setTimeout(function () {
     8         c+=1
     9         callback()
    10     },1000)
    11 }
    12 
    13 plus(printIt)

    3、什么是I/O?磁盘的写入和读出,数据的进和出。在nodejs中本质上是为数据库和文件系统这些资源提供接口,向文件系统发送一个请求的时候不用等待硬盘,硬盘准备好的时候非阻塞接口会通知到node。

    4、什么是单线程/多线程? 单线程:程序是按顺序执行的。一次只能谈一个女朋友,分手后再谈下一个。如果一个女朋友纠缠你,就会导致阻塞。

    多线程:有管理和分配资源的难度。可以同时脚踏几只船,但是要分配好资源。否则争抢资源,自己也会崩溃。

    5、什么是阻塞/非阻塞?阻塞:如打电话预约,如果对方不回信,自己这里就一直是挂起状态。非阻塞:等不到回信,自己就先去玩,可以隔段时间打电话询问。

    6、什么是事件?鼠标点击,拖拽窗口等。

    7、什么是事件驱动?所有触发的事件都是EventEmitter的实例。为某个事件注册了回调函数,这个回调函数不是马上执行,只有当这个事件发生的时候才会调用回调函数,这种函数执行的方式就叫事件驱动。这种回调就叫基于事件驱动的回调。如果这些回调和异步的IO操作有关,这个就可以看作是基于回调的异步IO,这种回调在nodejs中是有事件来驱动的。

    8、什么是基于事件驱动的回调?

    9、什么是事件循环Eventloop?倘若有大量的异步操作,以及IO的耗时操作甚至是定时器控制的延时操作,他们完成的时候都会调用相应的回调函数,从而来完成一些密集的任务而又不会阻塞整个程序执行的流程,这时这么多事件就需要有一个机制来管理,这种机制就是事件循环。

    Eventloop:是一个回调函数队列。当异步函数执行的时候,回调函数就会被压入到这个队列,对于nodejs来说靠一个单线程不断的查询队列中是否有事件,当他读取到一个事件的时候将调用与这个事件关联的js函数。事件的循环是先进先出的任务队列。回调就按照他们被加入队列的顺序来执行。整个队列可以理解成普通的函数和回调函数构成的完整的队列。

    Nodejs的核心思想:单线程非阻塞和事件驱动

    事件循环 :----“任务队列”是一个事件的队列(也可以理解成消息 的队列),IO设备完成一项任务(除了IO设备的事件 以外,还包括一些用户产生的事件,比如鼠标点击、 页面滚劢等等)、就在"任务队列"中添加一个事件,表 示相关的异步任务可以迚入"执行栈"了。主线程读取" 任务队列",就是读取里面有哪些事件。

    只要主线程的执行栈为空时,主线程就会去读取"任务 队列" ,依次执行那些带有事件任务所对应的回调函数。 这个过程是循环丌断的,所以这种运劢机制又称为 Event Loop(事件循环)。

    主线程运行的时候,产生堆和 栈,栈中的代码调用各种外部 API,它们在"任务队列"中加 入各种事件。只要栈中的代码 执行完毕,主线程就会去读取 "任务队列",依次执行那些事 件所对应的回调函数。

    定时器 --------"任务队列"中除了放置异步任务的事件,还可以放 置定时事件,即指定某些代码在多少时间之后执行。 这叫做"定时器"(timer)功能,也就是定时执行 的代码。

    Node的运行机制如下:  V8引擎解析JavaScript脚本。  解析后的代码,调用Node API。  libuv库负责Node API的执行。它将丌同的任务分配给 丌同的线程,形成一个Event Loop(事件循环),以 异步的方式将任务的执行结果返回给V8引擎。  V8引擎再将结果返回给用户

  • 相关阅读:
    无法重用Linq2Entity Query
    The Joel Test
    MSBuilder directly instead of default VSComplie with keyborad shotcut 原创
    客户端缓存(Client Cache)
    关于代码重构和UT的一些想法,求砖头
    ExtJS2.0实用简明教程 应用ExtJS
    Perl information,doc,module document and FAQ.
    使用 ConTest 进行多线程单元测试 为什么并行测试很困难以及如何使用 ConTest 辅助测试
    史上最简单的Hibernate入门简介
    汽车常识全面介绍 传动系统
  • 原文地址:https://www.cnblogs.com/zuojiayi/p/6907598.html
Copyright © 2011-2022 走看看