一、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是单线程的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 徐玮1980-我爱校园[台湾复刻版][WAV+CUE]
- 群星《极品人声-女声1号》[WAV分轨][510M]
- 欧美极美女声《 弦动你心》3CD[WAV分轨][1.7G]
- 张惠妹《歌声妹影 Live》SACD[ISO][2.9G]
- 黑豹乐队.2024-Smokescreen视陷(EP)【风华秋实】【FLAC分轨】
- 十个勤天.2024-展开一天【可能文化】【FLAC分轨】
- 王杰.1989-故事的角色(粤)【华纳】【WAV+CUE】
- 【原神】纳塔万火之瓯8个被掩藏起来的宝箱
- 【原神】胡桃突破素材(霓裳花,骗骗花)收集攻略
- 【原神】V5.1攻略 |「胡桃」一图流丨角色解析攻略
- Xbox版本的《夺宝奇兵:古老之圈》将以60FPS为目标
- 《潜行者2》将提供一个强大MOD工具包!主机PC都支持
- 《潜行者2》技术制作人:游戏将提供始终稳定的帧率!
- 《刺客信条:枭雄》雕像开放预订
- Bungie新作官方中文定名《惑星行者》 商店页面上线