Node的异步机制如何理解,如何解决高并发的
Admin 2022-07-14 群英技术资讯 1172 次浏览
这篇文章给大家分享的是Node的异步机制如何理解,如何解决高并发的。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
如果我们一个网页的内容,那么就需要做分页功能,因此这篇文章就给大家分享用JavaScript怎样实现简易的分页的功能,实现效果及代码如下,对大家了解分页功能的实现有一定的帮助,接下来我们就一起来了解看看吧。
jq去掉html标签的方法:1、使用remove(),语法“$("选择器").remove()”;2、使用empty(),语法“$("选择器").empty()”;3、使用detach(),语法“$("选择器").detach()”。
这篇文章主要给大家介绍JS中的Proxy对象,一些朋友可能对Proxy对象的用途以及用法不是很了解,对此下文有详细的介绍,有需要的朋友可以参考下面的代码,接下来我们一起来学习Proxy对象吧。
本文实例为大家分享了JS旋转实现转盘抽奖效果的具体代码,供大家参考,具体内容如下闲来没事,做了一个模拟转盘抽奖的HTML&JS的效果:可以在设置的时候,选择几个区域,并且可以填写指针将要停止的区域
搜索功能可以帮助我们更快的获取到我们想要的信息,那么我们做网站时如何实现一个搜索功能呢?这篇文章就以JavaScript实现百度搜索为例,介绍一下实现原理以及具体代码。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008