• 技术文章 >web前端 >js教程

    node的异步机制是基于什么

    青灯夜游青灯夜游2022-07-11 19:18:27原创94

    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、网络通信、数据库查询都以非阻塞的方式执行,返回结果由事件循环来处理。如图:

    2.png

    Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查后面事件。这样做的好处是,CPU和内存在同一时间集中处理一件事,同时尽量让耗时的I/O等操作并行执行。对于低速连接攻击,Node.js只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。

    事件循环机制

    所谓事件循环是指NodeJS会把所有的异步操作使用事件机制解决,有个线程在不断地循环检测事件队列。

    NodeJS中所有的逻辑都是事件的回调函数,所以NodeJS始终在事件循环中,程序入口就是事件循环第一个事件的回调函数。事件的回调函数中可能会发出I/O请求或直接发射( emit)事件,执行完毕后返回事件循环。事件循环会检查事件队列中有没有未处理的事件,直到程序结束。NodeJS的事件循环对开发者不可见,由libev库实现,libev不断检查是否有活动的、可供检测的事件监听器,直到检查不到时才退出事件循环,程序结束。

    1.png

    更多node相关知识,请访问:nodejs 教程

    以上就是node的异步机制是基于什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nodejs​ node
    上一篇:node的全局对象是哪个 下一篇:进程和线程如何理解?Node.js中的进程和线程是怎样的?
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• node中是否包含dom和bom• c语言中node是什么意思• node版本14与10的区别是什么• socketio必须用在node中吗• reactjs只能在node中运行吗• 总结分享了解nodejs的几个关键节点
    1/1

    PHP中文网