nodejs是什么
2017-11-12 本文已影响6人
猪猪9527
nodejs是什么
nodejs是js runtime
使用事件驱动 和 非阻塞I/O 模型
非阻塞I/O
阻塞: I/O时进程等待I/O完成时进行下一步
非阻塞: I/O时函数立即返回,进程不等待I/O完成 (异步的感觉)
事件驱动
- I/O等异步操作结束后的通知(遇到I/O,不等I/O执行完直接执行下面程序,等其执行完发射一个事件,对事件找其相应的处理程序)
- 观察者模式
为什么偏爱nodejs
- 前端职责范围变广
- 适合I/O密集,高并发
cpu密集: 压缩,解压,加密,解密
I/O密集: 文件操作,网络操作,数据库
web常用场景
- 静态资源读取
- 数据库操作
- 渲染页面
高并发应对之道
高并发: 单位时间访问量很大
- 增加机器数
- 增加每台机器的cpu数 - 多核
进程
- 进程: 计算中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位
- 多进程: 启动多个进程,多个进程可以一块执行多任务
nodejs工作模型
cpu处理 -> I/O
cpu处理的速度远远大于I/O的
cpu相当于服务员 I/O相当于大厨 一个大厨对应一个服务员
这样其实减少服务员 减少到一个 就是开一个进程
这样没有占用cpu
线程
线程 :进程内一个相对独立的,可调度的执行单元,与同属一个进程的线程共享进程的资源
多线程: 启动一个进程,在一个进程内启动多个线程,这样多个线程也可以一块执行多个任务
nodejs的单线程
- 单线程只是针对主进程,I/O操作系统底层多线程调度
- 单线程不是单进程
nodejs常用场景
- web server
- 本地代码构建
- 实用工具开发(小爬虫,但不是最佳的)