了解node.js
前言
Node.js是构建于Chrome V8引擎上的Javascript 运行时 ,Javascript才是一门语言,简单理解Node.js就是让Javascript在服务器上跑起来的运行时;Node.js使用 事件驱动机制、具有非阻塞的I/O模型这样的特点,废话不多说,来看看本次分享 都有哪些亮点吧!
一、认识 Node.js
关键词:非阻塞I/O、事件驱动
1. 非阻塞I/O
阻塞:I/O时进程休眠等待I/O完成时进行下一步
非阻塞:I/O时函数立即返回,进程不等待I/O完成
2. 事件驱动
事件驱动:I/O等待异步操作结束后的通知
内部实现:通过观察者模式来实现事件驱动机制
二、Node.js的 长处
关键词:高并发、I/O密集场景优势明显
为何偏爱Node.js:
-
前端职责范围变大,统一开发体验
-
事件驱动和异步I/O的优点,让Node在处理高并发、I/O密集场景时的性能优势明显
1. CPU密集 VS I/O密集
CPU密集:如果某一个程序大部分用来做逻辑判断、计算,则称之为CPU密集
CPU密集:压缩、解压、加密、解密
I/O密集:如果某一个程序大部分用来做存取操作,则称之为I/O密集
I/O密集:文件操作、网络操作(HTTP)、数据库操作
2. web常见场景(I/O密集)
-
静态资源读取(HTML、css\javascript)
-
数据库操作
-
渲染页面
以上场景均可称为I/O密集操作,当然也包含部分的(CPU操作)
3. 高并发
高并发:在单位时间内,访问量特别大称之为高并发
高并发应对之道:
-
增加机器数:流量非常的大时,通过负载均衡让不同机器处理
-
增加每台机器的CPU数量(多核):运算能力的增强
4. 进程
进程:是计算机中的程序关于某数据集合上的一次运算活动,是系统进行资源分配和调度的基本单位
多进程:启动多个进程,多个进程可以一块执行多个任务
传统WEB服务器(当当前任务完成后在执行下一任务,单台机器容易面临高并发问题):
(打比方):
点菜
用户------->服务员---------->厨师------
<------- <---- | 上菜 | 做菜 |
<--------- <-----|
下一用户...
下一用户.....
Nodejs工作模型:
5. 线程
线程:进程内的一个相对独立、可以调度的执行单元,与同属一个进程的线程共享进程的资源
多线程:启动一个进程,在一个进程内启动多个线程,这样多个线程可以一块执行多个任务
Nodejs单线程:
- 单线程只是针对进程,I/O操作系统的底层仍然是多线程调度
- 单线程并不是单进程
Node.js性能好的前提(常用场景): WEB场景、高并发、I/O密集
6. 公司实际开发常用Node.js做什么?
-
Web Server
-
本地代码构建
-
实用工具开发(小爬虫)
结语
OK,这次关于Node.js的分享 到这就结束了,希望能帮助刚入门的小白😜有深刻的理解。