JavaScript runtime built on Chrome's V8 事件驱动 非阻塞IO模型
阻塞: I/O时进程休眠等待I/O完成后进行下一步
非阻塞: I/O时函数立即返回, 进程不等待I/O完成
事件驱动 I/O等异步操作结束后的通知
观察者模式
nodejs通过事件循环机制快速分发处理事件,这是node最核心的特性
nodejs线程会持续进行事件循环,直到所有任务都完成后才退出。当有事件发生时,node会触发相应的回调函数。(同一时刻只有一个回调函数被执行)
** 基于非阻塞API的事件驱动编程**
在处理高并发.I/O密集场景性能优势明显
- cpu密集: 压缩 解压 加密 解密
- IO密集: 文件操作 网络操作 数据库
web常见场景
- 静态资源读取
- 数据库操作
- 渲染页面
高并发应对之道
- 增加机器数
- 增加机器的cpu数 -- 多核
进程: 计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位
多进程: 启动多个进程 多个进程可以一块执行多个任务
线程: 进程内一个相对独立的 可调度的执行单元, 与同属一个进程的线程共享进程的资源
多线程: 启动一个进程 进程内启动多个线程 这样 多个线程也可以一块执行多个任务
Nodejs的单线程
- 单线程只是针对主进程, IO操作系统底层多线程调度
- 单线程并不是单进程 可以使用多进程
- WEB SERVER
- 本地代码构建
- 异步io
- 事件与回调函数
- 单线程
-
用一部分进程用于计算, 通过进程间的消息传递来传递结果
-
nodejs可以用使用c++编写的模块来应对cpu密集的情况