Node的异步机制如何理解,如何解决高并发的
Admin 2022-07-14 群英技术资讯 652 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
我们在平时写代码的时候偶尔会碰到进制转换的问题,常见的有2进制,8进制,10进制,16进制之间的转换,但是36进制却很少听过,这里就让我们用JS来简单尝试一下36进制的实现吧
目录使用create,mounted调用方法我之前有个错误的写法错误有2mounted方法和created区别使用create,mounted调用方法首先:我之前有个错误的写法错误有21,我一直以为在created里定义方法然后使用,其实这里的getCustomerInfo只是调用2,所有的方法都应该在methods里
Window对象可以用来打开浏览器,调整浏览器的位置、大小等等功能。Window对象可以处理框架和框架之间的关系,通过这种关系在一个框架中处理另一
如何进行Node扩展开发?下面本篇文章就来介绍一下开发Node.js扩展的前置知识,带你入门Node.js扩展开发,希望对大家有所帮助!
选择器表示要定义样式的对象,可以是元素本身,也可以是一类元素或者制定名称的元素。常用的选择器有十种左右类型选择符,id选择器,class选择器,通配符等。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008