小别致真东西
文章77
标签31
分类26
NodeJS 学习

NodeJS 学习

官网
中文文档

简介:

特点: 所谓特点就是 Node.js 是如何解决服务其高性能瓶颈的问题的

单线程

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

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

单线程的好处操作系统完全不再有线程创建、销毁的时间开销。
通过 Node 的事件循环机制 Node 在宏观上也能实现 “并发”

非阻塞 I/O

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

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

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

阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%。所以,这是一种特别有哲理的解决方案:与其人多,但是好多人闲着;还不如一个人玩命,往死里干活儿。。

事件驱动

在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在Node中,在一个时刻,只能

执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,又有新用户连接

了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。。事件循环

Node.js底层是C++ (V8也是C++写的)。底层代码中,近半数都用于事件队列、回调函数队列的构建。

三个特点其实就是一个特点

Node 适合业务

善于 I/O, 而不擅长于计算。 Node 最擅长的就是任务调度, 如果业务有大量的 CPU 计算, 实际上相当于这个计算阻塞了线程
当应用程序需要处理大量并发的 I/O, 而且在像客户端发出响应执勤啊,应用程序内部并不需要进行非常复杂的处理的时候 Node 非常适合。
Node 非常适合与 webSocket 配合, 开发长链接的实时交互应用程序
因为长链接也是任务调度

比如:

  • 用户表单收集
  • 考试系统
  • 聊天室
  • 图文直播
  • 提供 JSON 的 API

Node 版本 release

本文作者:小别致真东西
本文链接:https://heiliu.github.io/2020/07/29/node/
true