一 Node介绍

2019-02-12  本文已影响0人  ddc大灰羊

1.什么是 Node.js

Node.js是一个JavaScript运行平台, 使用 Google V8引擎(基于es6). 特征是异步和事件驱动机制。Node.js是单线程编程模型,可以规避一些在线程编程中出现的问题,如资源死锁和竞态条件

2.非阻塞I/O

在执行磁盘或网络这样的慢I/O操作时,我们希望程序可以继续执行其他业务逻辑。Node用三种技术来实现: 事件、异步API、非阻塞I/O。

为了更好的解释非阻塞I/O, 引用一下Node.js实战(第二版)

在Node程序员看来,非阻塞I/O是个底层属于。它的意思是说,你的程序可以在做其他事情时,发起一个请求来获取网络资源,然后当网络操作完成时,将会运行一个回调函数来处理这个操作的结果。

结合 jawil的github issue

看看这样的业务场景:需要从多个数据源拉取数据,然后进行处理。

①串行获取数据,这是我们一般的解决方案,一PHP为例的I/O阻塞-PHP为例,假如获取profile和timeline操作各需要1s,那么串行获取就需要2s。

②Node.js非阻塞I/O事件会创建一个线程去执行,然后主线程会继续往下执行,因此,拿profile的动作触发一个I/O事件,马上就会去执行拿timeline的动作,两个动作并行执行,加入各需要1s,那么总的时间就是1s。它们的I/O操作执行完成后,会发射一个事件,profile和timeline,事件代理接收后继续往下执行后面的逻辑,这就是Node.js非阻塞I/O的特点。

非阻塞I/O是程序执行过程中,I/O操作不会阻塞程序的执行,也就是在I/O操作的同时,继续执行其他代码(这得益于Node的事件循环机制)。在I/O设备效率还远远低于CPU效率的时代,这种I/O模型(非阻塞I/O)为程序带来的性能上的提高是非常可观的。

libuv是提供快速、跨平台、非阻塞I/O的本地库

3. 核心模块

Node的标注库核很精巧,是在JavaScript标准上加入了文件和TCP/IP网络功能,使其成为一个可以编写服务器端的编程语言。常用node库, 文件系统库(fs, path)、TCP客户端和服务端库(net)、HTTP库(http和https)、域名解析库(dns)、用于写测试的断言库(assert)、用于查询平台信息的操作系统库(os)、用于处理事件的事件模块。

4. Node自带工具

Node自带npm包管理器以及调试器

npm init -y
node debug xxx.js

5. v8引擎

v8引擎由Google的Chromium项目组开发,主要负责JavaScript代码的解释和执行。它的特性是将JavaScript直接编译为机器码并对代码进行优化,让Node运行的更快。

上一篇 下一篇

猜你喜欢

热点阅读