美文网首页
对JavaScript运行机制的理解

对JavaScript运行机制的理解

作者: 长在床上的人 | 来源:发表于2016-11-14 14:40 被阅读0次

    在Node官网的首页中,是这么介绍:

    Node.js®是一个基于Chrome V8 引擎的 JavaScript 运行时。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。Node.js 之生态系统是目前最大的开源包管理系统。

    森么是运行时,什么是事件驱动,什么是非阻塞I/O?

    运行时

    “运行时”表示完整的 JavaScript 执行环境。 所创建的每个运行时都有自己的独立垃圾回收堆,默认情况下,还拥有自己的实时 (JIT) 编译器线程和垃圾回收器 (GC) 线程。

    事件驱动和非阻塞I/O模型

    简单的说,首先JavaScript是单线程的,也就是说工作只能一件一件的来.JavaScript有一个主线程,同步执行的任务都是在主线程上一次执行,而异步任务会在主线程挂起,所谓挂起,就是指异步任务所对应的<b>回调函数</b>,把需要I/O设备处理的任务交由I/O设备处理,主线程会继续往下执行,并不会等待I/O设备的结果.当I/O设备处理完成以后,会在任务队列(也可以叫做消息队列)中添加一个事件,当主线程上的同步任务<b>全部执行完成</b>以后,主线程才会去任务队列中取出事件,并执行此事件,也就是执行此异步任务对应的回调函数.
    值得注意的事情是,而消息队列的数据结构是队列,也就是说,主线程去消息队列中取出事件的顺序是先进先出的.

    node.js运行流程

    如图所示:

    Paste_Image.png

    由chrome的V8引擎来解析js的代码,V8引擎会调用node.js的I/O接口,通过Libuv来实现事件循环.将结果返回给V8引擎,最后显示出结果.

    相关文章

      网友评论

          本文标题:对JavaScript运行机制的理解

          本文链接:https://www.haomeiwen.com/subject/vdkfpttx.html