EventLoop

Netty EventLoop与EventLoopGroup详解 Netty线程模型采用Reactor模式,通过EventLoop和EventLoopGroup实现高效I/O处理。核心设计包括:单线程串行化(一个Channel绑定一个EventLoop)、主从多线程模型(bossGroup处理连接,workerGroup处理I/O)、任务队列调度(ioRatio平衡I/O与任务执行)。EventLoop内部通过Selector轮询I/O事件,处理流程遵循I/O优先原则,支持定时任务和普通任务的有序执行。该模型通过线程亲和性避免锁竞争,配合轮询负载均衡策略实现高并发低延迟, 阅读详情

答案:

了解几个概念:调用栈、同步/异步任务、宏任务/微任务

JavaScript本身是单线程,也就是同一时刻只能干一件事,JS任务包含了同步任务和异步任务,遇到执行函数会将其放入调用栈(先进后出)中,遇到setTimeout/setInterval等异步任务时,会把它放入到消息队列中,等主线程的任务执行完成以后,再回过头执行消息队列中的异步任务,如果异步任务中仍然有异步任务,会继续放入消息队列,以此类推,便形成了一个事件循环。

异步任务:

  • setTimeout

  • setInterval

异步任务又分为宏任务和微任务,promise就属于微任务。

 

详细解析:

Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制。

调用栈(Call Stack)

 栈 是一种 LIFO(Last In, First Out)的数据结构,特点即 后进先出。

调用栈 本质上当然还是个栈,关键在于它里面装的东西,是一个个待执行的函数。

Event Loop 会一直检查 Call Stack 中是否有函数需要执行,如果有,就从栈顶依次执行。同时,如果执行的过程中发现其他函数,继续入栈然后执行。

先拿两个函数来说:

  • 栈空
  • 现在执行到一个 函数A,函数A 入栈
  • 函数A 又调用了 函数B,函数B 入栈
  • 函数B 执行完后 出栈
  • 然后继续执行 函数A,执行完后A也 出栈
  • 栈空

 

Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行。

event-loop-process.png

  • 开始,任务先进入 Call Stack
  • 同步任务直接在栈中等待被执行,异步任务从 Call Stack 移入到 Event Table 注册
  • 当对应的事件触发(或延迟到指定时间),Event Table 会将事件回调函数移入 Event Queue 等待
  • 当 Call Stack 中没有任务,就从 Event Queue 中拿出一个任务放入 Call Stack

而 Event Loop 指的就是这一整个圈圈:

它不停检查 Call Stack 中是否有任务(也叫栈帧)需要执行,如果没有,就检查 Event Queue,从中弹出一个任务,放入 Call Stack 中,如此往复循环。
异步编程之 EventLoop 从这篇文章开始,我们将正式进入 Dart 中的异步编程,异步编程属于 Dart、Flutter 开发中的重点和难点。这一系列文章不仅仅需要学会如何使用 Dart 中异步 API,更重要的是需要去理解其背后的原理。我们都知道,Dart 语言和 Javascript 一样都是单线程模型的,而不是像类似 Java、C# 多线程模型。同时也就意味着 Dart 不存在像 Java 多线程线程安全以及锁竞争情... 阅读详情

相关推荐

Netty的精髓——EventLoop

Netty 高性能的奥秘在于其 Reactor 线程模型。 EventLoop 是 Netty Reactor 线程模型的核心处理引擎,那么它是如何高效地实现事件循环和任务处理机制的呢? 文章目录再谈 Reactor 线程模型单线程模型多线程模型主从多线程模型Netty EventLoop 实现原理EventLoop 是什么Netty 如何实现 EventLoop 再谈 Reactor 线程模型 网络框架的设计离不开 I/O 线程模型,线程模型的优劣直接决定了系统的吞吐量、可扩展性、安全性等。目前主流的网络

798

Java物联网开发(netty springboot mq)

Netty是当前非常流行的网络通讯框架,当程序对网络数据处理时,需要保证高并发和高可靠,底层就可以用Netty支撑。本套课程详细讲解了Netty核心技术点,同时进行底层机制和源码剖析,并编写了大量的应用实例。通过学习可以快速学习Netty的底层实现机制,熟练运用Netty解决网络高并发问题。Netty涉及内容很多(比如:设计模式、数据结构、并发、同步、异步,阻塞等),目前网上的Netty课程不多,且普遍讲解晦涩难懂,内容浅尝辄止,导致很多学习者只知道Netty的核心组件,但不知道怎么使用到项目之中。本课程针对上述问题,有针对性的进行了升级:(1) 授课方式采用图解+源码分析的方式,让课程生动好理解;(2)除了系统的讲解,还对Netty的核心技术进行了源码剖析(包括: 心跳(heartbeat)服务、EventLoop源码、任务提交到异步线程池、Netty启动过程源码)。(3)protobuf ,掌握物联网开发 ,netty集群架构,掌握IM聊天项目,掌握IM架构知识 

Windows 11“此应用已被管理员阻止运行”解决方案

通过本文介绍的两种方法,你应该能够解决Windows 11中“此应用已被管理员阻止运行”的问题。无论你选择创建新管理员账户还是禁用管理员批准模式,都请确保了解相关操作的风险,并根据你的实际需求做出选择。通过禁用“用户账户控制:以管理员批准模式运行所有管理员”设置,可以解决因系统安全设置导致的应用程序被阻止运行的问题。这种方法适用于那些希望简化管理员账户操作流程的用户,但需要注意可能带来的安全风险。通过创建并登录具有管理员权限的新账户,可以解决因系统安全设置导致的应用程序被阻止运行的问题。

mmoo_python的博客 1万+

event loop 详解

带你轻轻松松搞懂 event loop。

qq_61233877的博客 1万+

物料主数据管理难在哪?基于AI算法的数据清洗工具了解一下

企企通打造的一套以AI模型和算法为核心的产品及服务,可针对各类企业的不同主数据痛点难点,提供多种解决方案,能够快速完成物料主数据清洗、识别、匹配、梳理,满足一物一码、分类梳理、一品多商、多维度比价、精准寻源选品、建立标准物料库、供应商及客户主数据清洗等业务场景需求。随着AI技术的快速发展,智能算法在数据清洗领域的应用越来越广泛,越来越多的数据清洗工作已经开始交由智能算法完成,通过自动化的方式处理大量数据,识别和纠正错误,填补缺失值,检测异常值,以及执行其他数据预处理任务,并提高效率并减少人为错误。

QQT_qqt的博客 1364

不用写代码!3个免费在线工具教你完成Lasso回归分析(含生存资料处理)

本文介绍3款免费在线工具,帮助用户无需编程即可完成临床数据的Lasso回归分析,特别适合处理生存资料。通过详细的操作指南和实战技巧,读者可以轻松掌握变量筛选、模型优化及结果解读,提升临床研究的效率和准确性。

weixin_33738555的博客 349

事件循环机制EventLoop

https://www.jianshu.com/p/c3716bedfaae 事件循环机制EventLoop BigTooth_3611关注 0.3372019.01.28 09:04:23字数 3,035阅读 1,677 Event Loop即事件循环,是解决javaScript单线程运行阻塞的一种机制。 一、EventLoop的相关概念 1、堆(Heap) 堆表示一大块非结构化的内存区域,对象,数据被存放在堆中 2、栈(Stack) 栈在javascript中又称执行栈,调用栈,是一种后进先出的数组结构

叶子先生的博客 8190

基于STM32智能教室灯光照明人数监测系统

本文设计了一套基于STM32和物联网技术的智能教室照明系统,通过光照传感器和双红外对管实现精准人数统计,结合"光照+人数"双条件判断实现按需照明。系统采用"感知-决策-执行-云联"架构,包含环境感知、人数统计、控制执行等模块,支持本地自动控制和手机APP远程管理。测试表明系统能有效避免"长明灯"现象,具有节能降耗、管理智能化的特点。创新点在于双向人数统计算法和双条件控制逻辑,为智慧校园建设提供了实用解决方案。

1159

一次弄懂Event Loop(彻底解决此类面试问题)

前言 Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。 为啥要弄懂Event Loop 是要增加自己技术的深度,也就是懂得JavaScript的运行机制。 现在在前端领域各种技术层出不穷,掌握底层原理,可以让自己以不变,应万变。 应对各大互联网公司的面试,懂其原理,题目任其发挥。 堆,栈...

weixin_34259559的博客 2194

STM32CubeMX 6.4.0 + STM32F407ZGT6 实战:基于YT8512C PHY的lwIP以太网配置与调试

本文详细介绍了使用STM32CubeMX 6.4.0为STM32F407ZGT6微控制器配置YT8512C PHY芯片,并成功移植lwIP以太网协议栈的实战过程。文章从硬件差异分析入手,逐步讲解时钟配置、ETH外设设置、PHY寄存器适配以及lwIP协议栈剪裁等关键步骤,旨在帮助开发者解决非标准PHY芯片的联网难题,最终实现网络连通与Ping测试。

n8m7b6v5c4的博客 592

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7532

EventLoop 事件循环机制

Event Loop 在JavaScript中,任务被分为两种,一种宏任务(MacroTask)也叫Task,一种叫微任务(MicroTask)。

Dark_programmer的博客 7487

华为OD机试 - 矩形绘制 - 数组、坐标偏移(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除。 当新绘制的矩形与已有图形重叠时,对图形取并集; 当新擦除的矩形与已有图形重叠时,对图形取差集。 给定一系列绘制和擦除操作,计算最终图形的面积。第一行为操作数N,接下来的N行格式为:d x1

学Java,找哪吒 835

muduo之EventLoop

EventLoop.cc就相当于一个reactor,多线程之间的函数调用(用eventfd唤醒),epoll处理,超时队列处理,对channel的处理。运行loop的进程被称为IO线程,EventLoop提供了一些API确保相应函数在IO线程中调用,确保没有用互斥量保护的变量只能在IO线程中使用,也封装了超时队列的基本操作。 EventLoop.h // Copyright...

1万+

第4章 部署负载均衡 Keepalived + HAProxy

本章在所有 Master 节点部署 Keepalived + HAProxy,为 kube-apiserver 提供高可用入口。Keepalived 实现 VIP(192.168.3.59)漂移,HAProxy 轮询转发请求至三个 Master 的 6443 端口(监听 6444 避免冲突)。健康检查脚本连续 5 次失败则停止 Keepalived,触发 VIP 自动切换。本章还包含配置详解、日常运维和问题排查。

幸福街--linux技术分享 120

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Netty学习——EventLoop

EventLoop Netty 高性能的奥秘在于其 Reactor 线程模型。 EventLoop 是 Netty Reactor 线程模型的核心处理引擎,那么它是如何高效地实现事件循环和任务处理机制的呢? Reactor 线程模型 关于Reactor线程模型前面已经学习过了,分成单线程模型、多线程模型、主从多线程模型。我们再看下Reactor 线程模型运行机制的四个步骤,分别为连接注册、事件轮询、事件分发、任务处理,如下图所示。 连接注册:Channel 建立后,注册至 Reactor 线程中的

hxyascx的博客 3100

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

EventLoop的作用

EventLoop 可以算是 muduo 的核心类了,EventLoop 对应着事件循环,其驱动着 Reactor 模型。我们之前的 Channel 和 Poller 类都需要依靠 EventLoop 类来调用。I/Oepoll_wait这里上代码,我们可以看见 EventLoop 的成员变量就有 Channel 和 Poller。其实 EventLoop 也就是Reactor模型的一个实例,其重点在于循环调用epoll_wait不断的监听发生的事件,然后调用处理这些对应事件的函数。

Stay hungry, Stay foolish 1283

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

重写muduo之EventLoop模块

C++11手写muduo库中的EventLoop模块

m0_62689947的博客 902

NodeJs EventLoop与JavaScript EventLoop详解

EventLoop是什么 EventLoop是一个代码执行模型,它规定了代码的执行顺序,nodeJs和JavaScript拥有各自的EventLoop,理解EventLoop能让我们更加理解代码的执行,更好地掌控代码 宏任务和微任务 ​ JavaScript中的代码执行分为同步执行和异步执行,而异步执行的代码中又分为宏任务和微任务,它们的执行顺序有所不同。它们并没有什么概念性的差别,只是根据执行顺序的不同而进行区分,仅此而已。因此,只需要硬性的记住哪些是宏任务哪些是微任务就可以了。 宏任务(macrota

qq_41634455的博客 453

Netty之EventLoop

为什么说 EventLoop 是 Netty 的精髓呢?因为 EventLoop 是 Netty Reactor 线程模型的核心处理引擎。要想明白 Netty 为什么可以轻松处理成千上万规模的客户端连接,就必须要掌握 EventLoop。由于本篇是入门篇,所以我们对其不会讲解很深入,掌握它的原理即可,为后面的进阶和源码分析打下基础。EventLoop 从字面上来看就是 event + loop,也就是事件循环,事件就是 I/O 事件,循环则可以理解为 while(true)。

爱琴孩的博客 891

muduo网络库之EventLoop类

本篇博客针对EventLoop类做下小结。 博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo 学习笔记: muduo网络库的线程类准许你one loop per thread,顾名思义每个线程只能有一个EventLoop对象,因此EventLoop独享的构造函数会检查当前线程是否已经创建了其它EventLoop对象,如果已经创建则终止程序。创建了EventLoop的线程就是IO线程,其主要功能是运行时间循环EventLoop::l

GK_2014的专栏 536

Netty-EventLoop

EventLoop是 Netty 中处理 I/O 操作的核心组件,它负责在一个单独的线程中管理多个Channel的 I/O 事件。每个Channel都会绑定到一个特定的EventLoop,并且所有与该Channel相关的 I/O 操作都会由这个EventLoop的线程来处理。这种设计确保了 I/O 操作的线程安全性,同时避免了复杂的并发问题。

Flying_Fish_roe的博客 1270

Net——EventLoop类(一)

1. 简化版EventLoop EventLoop.h #ifndef MUDUO_NET_EVENTLOOP_H #define MUDUO_NET_EVENTLOOP_H #include <boost/noncopyable.hpp> #include <muduo/base/CurrentThread.h> #include <muduo/bas...

神秘的火柴人的专栏 343

【Muduo】三大核心之EventLoop

当mainLoop接受到一个新的连接请求时,它会根据EventLoopThreadPool中的线程来选择一个subLoop,将新创建的TcpConnection的Channel放入这个subLoop中。每个subLoop都在一个独立的线程上运行,有一个用于唤醒自身的fd和Channel,运行一个Poller,并保存自己管理的多个Channel,以实现并发处理多个连接的目的。subLoop中的事件处理逻辑与mainLoop类似,也是通过Poller来监听fd上的事件,并调用相应的回调函数来处理这些事件。

qq_20756957的博客 1299

EventLoop再分析之IO线程(29)

EventLoop IO 线程的简单描述 进程(线程)wait/notify pipe socketpair eventfd eventfd 是一个比 pipe 更高效的线程间事件通知机制,一方面它比 pipe 少用一个 file descripor,节省了资源;另一方面,eventfd 的缓冲区管理也简单得多,全部“buffer” 只有定

Riak, Spark, Golang, Erlang, 云存储, 云计算, 数据挖掘 6126
上一篇: 观察者和发布订阅者区别
下一篇: for in与for of用法及区别
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值