Node.js简介 | 青训营笔记

133 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天

前言

Node.js是什么

  • nodejs是一个是基于Chrome V8的JavaScript引擎,提供了JS运行时的执行环境,这一点有点类似于Java的JVM虚拟机。
  • 简单点来讲就是node.js可以解析和执行JavaScript代码
  • 以前只有浏览器可以解析执行JavaScript代码,现在的JavaScript完全可以脱离浏览器来运行,归功于node.js

为什么要使用Node.js

  • Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核), 这使得 Node.js 的性能非常好。
  • nodejs是一个非常轻量级的框架,所有代码都是通过JavaScript来编程的,这意味着,我们可以快速的轻而易举的开发一个web框架,而不需要使用PHP,Java,Python,这种相对重量级的语言。

Node.js优缺点

  • 优点:
    1. 事件驱动
    2. 异步编程
    3. 非阻塞模式的IO
    4. 轻量高效
  • 缺点:
    1. 不适合CPU密集型运算,只支持单核CPU,不能充分利用CPU
    2. 靠性低,一旦代码某个环节崩溃,整个系统都崩溃
  • 总结:NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。

Node.js特点

1. 事件驱动

在 Node.js 中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在 Node.js 中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,又有其他事件产生,可以转而处理其他事件(比如,又有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。

2. 非阻塞IO模型(异步)

例如,当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序的执行效率。

由于 Node.js 中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。

当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。

3. 单线程

在 Java或者 .net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而 Web 应用程序的硬件成本当然就上升了。

Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制 Node.js 程序宏观上也是并行的。使用 Node.js ,一个8GB内存的服务器,可以同时处理超过4万用户的连接。

4. 跨平台

Node.js应用场景

  1. 多页面、多Ajax请求应用,前端有大量的异步请求,需要服务器后端有极高的响应速度
  2. 于node.js开发Unix命令行工具,node.js可以大量产生子进程,并以流的方式输出
  3. 传统的web应用,通常会将HTTP 请求喝和应看成是原子事件。而node.js会充分利用流式数据这个特点,构建一些特别的应用

引用参考

Node.js官方文档

CSDN-Nodejs入门教程