详解node单线程实现高并发原理与node异步I/O

发布时间 - 2026-01-11 03:21:11    点击率:

一、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是单线程的

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


# nodejs高并发单线程  # nodejs单线程  # 并发  # node  # 异步  # Nodejs高并发原理示例详解  # Nodejs探秘之深入理解单线程实现高并发原理  # node高并发原理机制解读  # 回调  # 多个  # 单线程  # 都是  # 是一个  # 多线程  # 多核  # 管理器  # 就可以  # 操作系统  # 就会  # 都有  # 都不  # 我来  # 很多人  # 能在  # 这就  # 去做  # 开启了  # 不支持 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现模型属性的自动加密  如何在Windows服务器上快速搭建网站?  手机网站制作与建设方案,手机网站如何建设?  如何在万网自助建站中设置域名及备案?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Swift中swift中的switch 语句  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Firefox Developer Edition开发者版本入口  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何记录自定义日志?(Log频道配置)  如何快速上传自定义模板至建站之星?  Bootstrap整体框架之CSS12栅格系统  Laravel如何使用Service Container和依赖注入?(代码示例)  南京网站制作费用,南京远驱官方网站?  免费视频制作网站,更新又快又好的免费电影网站?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Android滚轮选择时间控件使用详解  如何在万网主机上快速搭建网站?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  浅析上传头像示例及其注意事项  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何用VPS主机快速搭建个人网站?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel如何优化应用性能?(缓存和优化命令)  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何在服务器上配置二级域名建站?  JavaScript如何实现继承_有哪些常用方法  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何登录建站主机?访问步骤全解析  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel如何配置Horizon来管理队列?(安装和使用)  如何用低价快速搭建高质量网站?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  EditPlus中的正则表达式实战(6)  Laravel如何使用Vite进行前端资源打包?(配置示例)  移动端脚本框架Hammer.js  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何处理异常和错误?(Handler示例)  活动邀请函制作网站有哪些,活动邀请函文案?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  七夕网站制作视频,七夕大促活动怎么报名?  在线制作视频网站免费,都有哪些好的动漫网站?  Android自定义控件实现温度旋转按钮效果  如何打造高效商业网站?建站目的决定转化率