Node的异步机制如何理解,如何解决高并发的
Admin 2022-07-14 群英技术资讯 404 次浏览
node的异步机制是基于“事件”的,所有的I/O、网络通信、数据库查询都以非阻塞的方式执行,返回结果由事件循环来处理。Node在同一时刻只会处理一个事件,完成后立即进入事件循环检查后面事件。这样CPU和内存在同一时间集中处理一件事,同时尽量让耗时的I/O等操作并行执行。
本教程操作环境:windows7系统、nodejs16版,DELL G3电脑。
NodeJS是单线程,单线程有以下好处:
简单
高性能,避免了频繁的线程切换开销
占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低
线程安全,没有加锁、解锁、死锁这些问题
如何解决高并发?
node使用异步IO和事件驱动(回调函数)来解决高并发这个问题。
一般来说,高并发解决方案会提供多线程模型,为每个业务逻辑提供一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。像apache,是一个请求一个线程。
而NodeJS使用的是单线程模型,对所有I/O都采用异步的请求方式,避免频繁的上下文切换,在NodeJS执行的时候维护着一个事件队列;程序在执行时进入事件循环等待下一个事件到来,每个异步I/O请求完成后都会被推送到事件队列中的等待执行。
NodeJS的异步机制是基于事件的,所有的I/O、网络通信、数据库查询都以非阻塞的方式执行,返回结果由事件循环来处理。如图:
Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查后面事件。这样做的好处是,CPU和内存在同一时间集中处理一件事,同时尽量让耗时的I/O等操作并行执行。对于低速连接攻击,Node.js只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。
事件循环机制
所谓事件循环是指NodeJS会把所有的异步操作使用事件机制解决,有个线程在不断地循环检测事件队列。
NodeJS中所有的逻辑都是事件的回调函数,所以NodeJS始终在事件循环中,程序入口就是事件循环第一个事件的回调函数。事件的回调函数中可能会发出I/O请求或直接发射( emit)事件,执行完毕后返回事件循环。事件循环会检查事件队列中有没有未处理的事件,直到程序结束。NodeJS的事件循环对开发者不可见,由libev库实现,libev不断检查是否有活动的、可供检测的事件监听器,直到检查不到时才退出事件循环,程序结束。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
什么是Puppeteer库?能做什么?怎么使用?下面本篇文章就来给大家介绍一下Puppeteer库,了解一下Node.js中使用Puppeteer库的方法,希望对大家有所帮助!
python虚拟环境 virtualenv是什么?virtualenv是一个创建隔绝的Python环境的工具。为什么要创建虚拟环境?它解决了“项目X依赖于版本1.x,而项目Y需要项目4.x”的两难问题,
最近学习过程中常碰到让用户登录注册这种,这篇文章主要给大家介绍了关于Vue实战记录之登陆页面实现的相关资料,需要的朋友可以参考下
这篇文章主要为大家详细介绍了小程序实现侧边栏切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
反转方法:1、利用for循环和push(),语法“var nar=[];for(var i=arr.length-1;i>=0;i--){nar.push(arr[i])}”;2、利用reverse(),语法“arr.reverse()”。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008