nodeJs 是一个基于chrome v8 的一个Javascript运行环境(runtime environment);
1: 事件驱动
同js 的事件异步操作;观察者模式 ;
2:非阻塞I/O模型 ;
(阻塞:如果在读写操作的时候需要调到底层 ,那么程序就会等待操作完成 才继续,)
(非阻塞:如果有I/O 操作函数立即返回 ,不会阻塞主程序。不等待I/O 操作完成)
web 是node js 的最佳使用场景 ,处理高并发,I/O密集场景 性能优势明显;
cpu 密集: 解压 ,压缩,解密,加密
I/O 密集:文件操作 网络操作 数据库操作
这里我们web操作大都是 I/O 操作,比如 : 静态文件读取,数据库操作,渲染页面;
高并发 解决之道:
1:增加机器数
2.增加每台机器的cpu数 -多核;
3. 使用 软件策略 优化
软件有几种模式:
1. Apache 一个请求就会建立进程后,分配的 cpu 资源 ; 加入是I/O操作的话那么就会等待 操作,浪费cpu资源; 高并发就会有阻塞;
2,node ,请求过来以后,会建立清单(Even Loop),I/O操作会挂起 ,交给cpu去满负荷执行这一任务;执行完毕以后,通知主线程再执行下一个任务;
因此 node适合去做高并发的web操作。 工作模型决定的。 nginx的原理也大致如此;
node的常用场景: webServer 本地代码构建 编写一些小工具
webServer 的优势已经说过;
前端代码 构建,虽然node的性能在打包上并不是太优秀 ;但是和js 同源 所以语法上有不可取代的优势;
前段工程师编写小工具的首选;