本篇文章主要介绍了node单线程实现高并发原理与node异步I/O ,具有一定的参考价值,有兴趣的可以了解一下

一、node单线程实现高并发原理

众所周知nodejs是单线程且支持高并发的脚本语言。可为什么单线程的nodejs可以支持高并发呢?很多人都不明白其原理,下面我来谈谈我的理解:

1. node的优点:I/O密集型处理是node的强项,因为node的I/O请求都是异步的(如:sql查询请求、文件流操作操作请求、http请求...)

a. 什么是异步?

异步:发出操作指令,然后就可以去做别的事情了,所有操作完成后再执行回调

异步的实现原理: 

// 第一步:定义变量
let a = 1;

// 第二步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)
setTimeout(() => {
 console.log(a);
}, 0)
// 第三步:赋值,回调函数没有执行
a = 2;
// 第四步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)
setTimeout(() => {
 console.log(a);
}, 0)
// 第五步:赋值,回调函数没有执行
a = 3;
// 当所有代码执行完毕,cpu空闲下来了,就会开始执行异步队列里面的回调函数
// 所以最后控制台输出:3 3

b. 什么是异步I/O?

异步I/O顾名思义就是异步的发出I/O请求

c. 虽然nodejs可以异步的发出I/O请求,但nodejs不支持多线程,为啥就可以支持高并发呢?

因为nodejs的I/O操作,底层是开启了多线程的

当同时有多个IO请求时,主线程会创建多个eio线程,以提高IO请求的处理速度    

额外知识点:

d. 虽然nodejs的I/O操作开启了多线程,但是所有线程都是基于主线程开启的只能跑在一个进程当中还是不能充分利用cpu资源

pm2进程管理器可以解决这个问题

pm2 是一个带有负载均衡功能的Node应用的进程管理器.

e. cpu核数与线程之间的关系

在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务,具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了

2. node的缺点:不擅长cpu密集型的操作

a. 什么是cpu密集型操作(复杂的运算、图片的操作)

// 这就是一个cpu密集型的操作
for (let i = 0; i < 1000000; i++) {
 console.log(i);
}

b. nodejs为什么不擅长cpu密集型操作

因为nodejs是单线程的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

最新资讯
袁隆平、屠呦呦等21位功勋科学家手模亮相中国科技馆

袁隆平、屠呦呦等21位

全国科普日启动之际,“国家最高科学技术奖获奖科学家手
对话张瑞敏:算法在这个时代被滥用了

对话张瑞敏:算法在这个

成功的企业家容易自恋,容易目中无人,张瑞敏的眼里始终有
无人机、无人车送快递何时全面普及?官方:还需一个阶段

无人机、无人车送快递

新办就邮政快递业助力脱贫攻坚有关情况举行发布会。国
蚂蚁集团据悉将把IPO融资目标提高到350亿美元

蚂蚁集团据悉将把IPO

蚂蚁集团据悉将把IPO融资目标提高到350亿美元。
邬贺铨等解读未来十年:5G如何才能“价廉物美”?| 新浪5G峰会

邬贺铨等解读未来十年

由新浪科技、新浪5G联合主办的“Refresh Your Life”
请顶流主播就能卖光库存?品牌商可不是冤大头

请顶流主播就能卖光库

假如只是以几个顶流主播令人瞠目的战绩海报来理解直播
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,