简介

NodeJS是什么?

Node.js是一个基于Chrome V8引擎的Javascript运行环境(runtime)。

Node.js 使用事件驱动, 非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

非阻塞I/O:I/O时函数立即返回,进行不等待I/O完成

阻塞I/O:I/O进程休眠等待I/O完成后进行下一步

事件驱动:

  • I/O等异步操作结束后通知

  • 观察者模式

为什么偏爱NodeJS?

  • 前端职责范围变大,统一开发体验。

  • 在处理高并发、I/O密集场景性能优势明显

CPU密集与I/O密集

  • CPU密集:压缩、解压、加密、解密

  • I/O密集:文件操作、网络操作、数据库

高并发应对:

增加机器数

增加每台机器的CPU数-多核

进程与线程:

进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位

多进程:启动多个进程,多个进程可以一块执行多个任务

线程:进程内一个相对独立的、可调度的执行单元,与同属一个进程的线程共享进程的资源

多线程:启动一个进程,在一个进程内启动多个线程,这样,多个线程也可以一块执行多个任务

NodeJS单线程

  • 单线程只针对主进程,I/O操作系统底层多线程调度。(NodeJS是主进程发送一个请求,这个请求交给I/O之后它是由操作系统底层多线程,多进行调度,达到最高性能,只是单线程的进行监听,操作系统告知I/O好了)

  • 单线程并不是单进程,多核可以使用cluster模块。

常用场景:

  • Web Server

  • 本地代码构建

  • 实用工具开发

Last updated