关于Node

Node.js是什么

  • Node.js is a javascript runtime built on Chormes‘s V8 javaScript engine
    • Node.js 不是一门语言
    • Node.js 不是库,不是框架
    • 是javaScript运行时环境
    • 简单点来讲node.js可以解析和执行javascript代码
    • 以前只有浏览器可以解析执行javascript代码
    • 也就是说现在javascript可以完全脱离浏览器来运行,一切都归功于,Node.js
  • 浏览器中的javascript
    • EcmaScript
      • 基本语法
      • if
      • var
      • function
      • Object
      • Array
    • BOM
    • DOM
  • Node.js中的javaScript
    • 没有 BOM,DOM
    • EcmaScript
    • 在Node这个javascript执行环境中为javaScript提供了一些服务器级别的操作API
      • 例如文件读写
      • 网络服务的构建
      • 网络通信
      • http服务器
      • 等处理
  • 构建与Chrome的v8引擎之上
    • 代码只是具有特定格式的字符串而已
    • 引擎可以认识它,引擎可以帮你去解析和执行
    • Google chrome 的 v8 引擎目前公认的执行javascript代码最快的
    • Node.js 的作者把Google Chorme中的V8引擎移植了出来,开发了一个独立的javascript运行时环境。

Node.js能做什么

  • web服务器后台工具
  • 命令行工具
    • npm(node)
    • git(c语音)
    • hexo(node)
  • 对于前端开发工程师来讲,接触node最多的是它的命令行工具
    • 自己写的很少,主要是使用别人的第三方开发的
    • webpack
    • gulp
    • npm

单线程

Node保持了JavaScript在浏览器中单线程的特点。而且在Node中,JavaScript 与其余线程是无法共享任何状态的。单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。

同样,单线程也有它自身的弱点,这些弱点是学习Node的过程中必须要面对的。积极面对这些弱点,可以享受到Node带来的好处,也能避免潜在的问题,使其得以高效利用。单线程的弱点具体有以下3方面。

  • 无法利用多核CPU。
  • 错误会引起整个应用退出,应用的健壮性值得考验。
  • 大量计算占用CPU导致无法继续调用异步I/O。

像浏览器中JavaScript与UI共用一个线程- -样, JavaScript长时间执行会导致U1的渲染和响应被中断。在Node中,长时间的CPU占用也会导致后续的异步I/O发不出调用,已完成的异步I/O的回调函数也会得不到及时执行。

Node采用了与Web Workers相同的思路来解决单线程中大计算量的问题: child_ process。子进程的出现,意味着Node可以从容地应对单线程在健壮性和无法利用多核CPU方面的问题。通过将计算分发到各个子进程,可以将大量计算分解掉,然后再通过进程之间的事件消息来传递结果,这可以很好地保持应用模型的简单和低依赖。通过Master-Worker的管理方式,也可以很好地管理各个工作进程,以达到更高的健壮性。

Node的应用场景

I/O密集型和CPU密集型

I/O密集型

Node面向网络且擅长并行I/O,能够有效地组织起更多的硬件资源,从而提供更多更好的服务。
I/O密集的优势主要在于利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。

CPU密集型

换一个角度,在CPU密集的应用场景中,Node是否能胜任呢?实际上,V8的执行效率是分高的。单以执行效率来做评判,V8的执行效率是毋庸置疑的。

相关推荐