Node.js第一讲:基础知识

 程序代码  原创  管理员  2019-11-25 21:11

概要:Node.js的整个优势都在于它的非阻塞I/O设计,要想真正了解它,不能只停留在JS语言层面,我们应该具备更多的知识才能轻松驾驭它。在使用Node.js的过程中,你会知道,我们日常的应用开发中,很多都可以用它来完成,让我们一起拥抱强大的Node.js吧!

思想

小核心

提供功能最小的模块集合

小模块

让一个程序只做好一件事情,比如npm

小接触面

只向外界暴露出最小的功能

简单实用

简单是复杂的最高境界


什么是I/O

1574401592674


1574401532144


  • I/O操作是计算机中最慢的

  • RAM的访问时间为ns级别,速度GB/s

  • 磁盘和网络的时间为ms级别,速度MB/s 或 GB/s


阻塞I/O

阻塞线程的执行,直到IO操作完成

1574401805261


多线程中的I/O

1574401947582


非阻塞I/O

  • 系统调用总是立即返回,不需要等到数据的读取和写入

  • 在调用的时候如果没有结果,会返回一个标识符表示当前还没有返回数据(文件描述符)


非阻塞I/O的结果获取

主动轮询资源——忙碌等待

1574402412221


主动轮询的缺点

  • CPU需要一直需要循环计算,大部分的时间被浪费


事件多路分解器——事件通知接口

收集并排列一组被监视的I/O事件,并阻塞这些事件,直到有新事件来处理它们。

1574403367868


  • 添加集合并关联READ操作

  • while中设置事件通知器,此操作是同步的,如果当前资源没有准备好,则会一直卡在此处,直到所有被监听的资源都可以准备进行READ,然后返回一个可供处理的events,并进入events loop


改造后的单线程模型

1574405925002


对比优势

  • 只需要阻塞一个线程

  • 不会影响多个I/O任务同时段的处理

  • 使所有线程总的空闲时间最小化

  • 无需线程切换,程序处理比较容易


Reactor模式

Node.js的并发核心

image-20191122152237802


非阻塞I/O引擎——libuv

  • 对不同平台的事件多路分解器的更高级别的抽象

  • 实现了自己的Reactor模式,用于创建事件循环、管理事件队列、运行异步I/O和排队等


架构图

image-20191122155726244


  • V8:JS解析引擎

  • libuv:I/O引擎

  • 绑定:封装与暴露v8与libuv的功能

  • node-core:高级别的Node.js API核心js库


基础设计模式


回调模式——同步CPS(Continuation Passing Style)

image-20191122160533703

image-20191122160555495


回调模式——异步CPS

image-20191122160632363


示例:

image-20191122161336490


示例分析:

image-20191122161618721


THE END

Node.js学习笔记  

编辑:myweb   最后更新于:2019-11-25 21:30

点评:学习,从未止步!



声明:本站部分文章系本站编辑转载,转载目的在于加快信息的传递,及时与广大网友分享更多信息,并不代表本站赞同其观点和对其真实性负责。 如涉及作品内容、版权和其它问题,请及时与本站联系,我们将在第一时间删除内容!本站文章版权归原作者所有,内容为作者个人观点,本站只提供参考并不构成任何投资及应用的建议。


联系我:help@wodeabc.com,鄂ICP备14016278号-2
©2016-2020 我的ABC All Rights Reserved.
友情链接: 一起编程网