Node.js 的那些与众不同

在这里插入图片描述

一、什么是 Node.js

官方定义:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时

  1. Node.js是一个让JavaScript运行载服务器上的开发平台,他让JavaScript的触角延申到了服务器端,可以与PHP、JSP、Python、Ruby并论。但是,Node.js不是一门独立的语言,与PHP、JSP、Python、Ruby、Perl的"即是语言,又是平台"不同,Node.js 使用的是JavaScript语言进行编程,运行是在chrome的V8上。其次,与传统的后台语言相比 Node.js 不用建设在任何服务器软件之上,它的众多设计理念与经典的LAMP架构也有多不同,Node.js 具有强大的伸缩性。
  2. Node.js 是用最小的硬件成本,追求最高的并发,获得最高的处理性能。

二、Node.js 的与众不同

1. 单线程

**多线程与NodeJs单线程比较:**

常见后台语言都是多线程,在处理业务时每来一个请求,则创建一个新的线程去处理请求。因此,要让Web应用程序支持更多的用户,就需要增加服务器的数量,这样对硬件的而成本就会显著上升。
.
Node.js 不为每一个请求创建一个独立的线程,而是仅使用一个线程。当有用户连接时,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js宏观上也是并行。

**NodeJs 单线程优劣:**

优势:在于操作系统完全不再有线程创建和销毁的事件开销,即能减少内存开销,操作系统内存换页
.
劣势:如果一个业务进入了,但是被I/O阻塞了代码的执行,则也就是线程阻塞了,这样就极大的降低了程序的执行效率

2. 非阻塞 I/O

Node.js采用非阻塞 I/O 机制,在挂起了访问数据库代码之后,将立即转而执行其后面的代码,把处理数据库返回结果的代码放在回调函数中,从而提高程序的执行效率。
.
阻塞模式下,一个线程只能处理一项任务,想要提高吞吐量必须通过多线程。
.
非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%

3. 事件驱动

当某个I/O执行完毕时,将以是事件形式通知执行I/O的线程,线程执行这个事件的回调函数,为了处理异步I/O,线程必须有事件循环,不断检查有无未处理的事件
.
"事件环"处理机制:在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其它事件(比如又有新用户连接了),然后返回继续执行原事件的回调函数。
.
Node的底层是C++,V8底层也是C++ 。底层代码中近半数都是关于事件队列、回调函数队列的构建 。
.
Node高性能最重要的环节:用事件驱动完成服务器的任务调度
在这里插入图片描述

三、多线程和单线程业务处理的区别

高并发 High Concurrency:是互联网分布式系统架构设计中必须考虑的因素之一,通常是指,通过设计保证系统能够同时并行处理很多请求
.
一般后台语言多线程与NodeJS单线程处理业务的不同:
在这里插入图片描述

四、Node.js搭建的服务器

1. Node 是服务器程序,写的JS语句都将运行在Node服务器上。返还给用户的,都是已经处理好的纯HTML。

JS文件本不可直接拖入浏览器运行,但是有了Node,就可以将任何一个JS文件,直接通过Node来运行。Node就是一个JS的执行环境
要跑起来一个Node服务器,这个服务器的脚本要是一个JS文件。运行该文件用的就是 node 命令。

2. Node没有Wed容器(Node没有根目录概念)

Node做的是路由的顶层设计,比如:一个网址:127.0.0.1/tmp/bar /tmp 和 /bar 并不是物理文件夹
即:Node里面一个URL和真实的物理文件是没有关系的,URL是通过Node的顶层设计,呈现某一个静态文件的,它可以路由到任何一个静态文件上去。

五、应用

1. 开发方向

  1. nodeJs 善于I/O,不善于计算,因为nodejs最擅长的就是任务调度,如果你的业务有巨量的CPU计算(同步代码),实际上也相当于这个计算阻塞了整个线程,即巨量的计算不适合NodeJS开发。
  2. 当应用程序需要处理大量高并发的I/O,而在向客户端发出响应之前,应用程序内部并不需要复杂的处理的时候,NodeJs非常适合。
  3. 适合与 web socket 配合,开发长连接的实时交互应用程序。

2. 主要应用

  1. Web服务 API 如:REST
  2. 实时多人游戏
  3. 后端的web服务,如:跨域、服务器端的请求;
  4. 多客户端的通信,如:即时通信
  5. 基于Web的应用 如:用户表单收集

六、前景

  1. Node.js是极客追求性能极致的产物,缺少了很多服务器的健壮考量 。所以node不会在银行、证券、电信等对可靠性要求高的业务中
  2. 成熟企业,基本都用Node实现某一方面的功能,如知乎的站内信、百度的大部分表单与数据库的交互
  3. Node不是银弹,Node只是工具箱中的一个小工具
发布了40 篇原创文章 · 获赞 31 · 访问量 2768

猜你喜欢

转载自blog.csdn.net/CodingmanNAN/article/details/104486666