nodejs的基本概念和应用场景

欢迎访问个人博客网站:
www.zhuxin.club

1. node是什么

Nodejs是一个基于Chrome V8的JavaScript运行环境。它使得JS可以运行在服务器端并且可以跨平台运行(Windows,mac OS以及Linux)。此外,与其他后端语言(如php)不同,node内置了http服务器,不需要额外部署http服务器(如Apache)

2. node的特点

  • 非阻塞I/O

在node中,当线程遇到IO操作时,不会以阻塞方式(即传统同步IO方式,同一时刻只能做一件事)等待IO操作完成,而是将IO请求转发给操作系统,继续执行下一条命令。当完成该IO操作后,再使用事件通知线程回来处理此事件。这样就可以不断“接单”,处理很多IO请求

  • 事件驱动

事件驱动的核心是异步回调函数(核心即上面的非阻塞IO)和事件循环的结合。Node会生成一个事件循环来监听事件,不断地检查是否有未处理的事件。有事件触发则调用回调函数

  • 单线程

传统的同步IO要实现高并发则需要多个线程,当在多核CPU情况下,可有效利用多核资源,但由于IO操作一般比较耗时,所以多线程这种方案往往性能不高。而node基于非阻塞IO的单线程模式,CPU核心率一直是100%,对IO操纵进行异步处理。避免了多线程的线程切换,创建,销毁的开销和复杂性。

同时,单线程的弱点也在于无法利用多核CPU,因为只有一个事件循环。在CPU密集型任务情况下,会导致多核的CPU资源浪费

3.node擅长什么

(1) 前端工程化应用

例如webpack等构建工具,着重于为开发者提升开发效率和保证研发质量。这类应用是运行在本地环境的服务,可快速定位,分析和解决问题

(2) 后端服务应用

如express,koa,egg等node服务端框架,其受众群体为真实用户,为用户提供交互体验方面的数据处理。这类应用运行在远程的服务,需要借助一些工具来监控运行情况。着重于提供稳定,安全,高性能的服务。这类应用真正发挥了node的异步驱动特性,主要表现在主线程不被cpu密集型所影响时,发挥其处理高并发的特性,成为大部分网络I/o较高的后端服务

(3) 准实时系统

如聊天系统,博客社交系统等一类轻量级,高流量,无复杂计算的系统。

(3) 游戏服务器

3.node不擅长什么

Node.js 不善于处理 CPU 密集型的业务(如数据加密,压缩等),如果要实现一个耗时 CPU 的计算逻辑,可以通过网络异步 I/O 给其他进程处理(具体为另开几个node服务分别负责执行计算,然后主node服务进程通过异步请求获取最终计算结果)

因为异步网络 I/O 充分利用了 Node.js的异步事件驱动能力,将耗时 CPU 计算逻辑给到其他进程来处理,而无须等待耗时 CPU 计算,可以直接处理其他请求或者其他部分逻辑。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享