返回顶部
首页 > 资讯 > 前端开发 > VUE >什么是Event Loop
  • 878
分享到

什么是Event Loop

2024-04-02 19:04:59 878人浏览 泡泡鱼
摘要

什么是Event Loop,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Event Loop 是一个很重要的概念,指的是计算机

什么是Event Loop,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。

javascript语言就采用这种机制,来解决单线程运行带来的一些问题。

什么是Event Loop

本文参考C. Aaron Cois的《Understanding The node.js Event Loop》,解释什么是Event Loop,以及它与JavaScript语言的单线程模型有何关系。

想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做“进程”(process),一般情况下,一个进程一次只能执行一个任务。

如果有很多任务需要执行,不外乎三种解决方法。

(1)排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。

(2)新建进程。使用fork命令,为每个任务新建一个进程。

(3)新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。(进程和线程的详细解释,请看这里。)

以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程上完成,即采用上面的***种方法。一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现”假死”,因为JavaScript停不下来,也就无法响应用户的行为。

你也许会问,JavaScript为什么是单线程,难道不能实现为多线程吗?

这跟历史有关系。JavaScript从诞生起就是单线程。原因大概是不想让浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此的运行结 果,对于一种网页脚本语言来说,这就太复杂了。后来就约定俗成,JavaScript为一种单线程语言。(Worker  api可以实现多线程,但是JavaScript本身始终是单线程的。)

如果某个任务很耗时,比如涉及很多I/O(输入/输出)操作,那么线程的运行大概是下面的样子。

什么是Event Loop

上图的绿色部分是程序的运行时间,红色部分是等待时间。可以看到,由于I/O操作很慢,所以这个线程的大部分运行时间都在空等I/O操作的返回结果。这种运行方式称为”同步模式”(synchronous I/O)或”堵塞模式”(blocking I/O)。

如果采用多线程,同时运行多个任务,那很可能就是下面这样。

什么是Event Loop

上图表明,多线程不仅占用多倍的系统资源,也闲置多倍的资源,这显然不合理。

Event Loop就是为了解决这个问题而提出的。Wikipedia这样定义:

“Event Loop是一个程序结构,用于等待和发送消息和事件。(a programming construct that waits for and dispatches events or messages in a program.)”

简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为”主线程”;另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为”Event Loop线程”(可以译为”消息线程”)。

什么是Event Loop

上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event  Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event  Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。

可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率。这种运行方式称为”异步模式“(asynchronous I/O)或”非堵塞模式”(non-blocking mode)。

这正是JavaScript语言的运行方式。单线程模型虽然对JavaScript构成了很大的限制,但也因此使它具备了其他语言不具备的优势。如 果部署得好,JavaScript程序是不会出现堵塞的,这就是为什么node.js平台可以用很少的资源,应付大流量访问的原因。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网VUE频道,感谢您对编程网的支持。

--结束END--

本文标题: 什么是Event Loop

本文链接: https://lsjlt.com/news/86289.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 什么是Event Loop
    什么是Event Loop,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Event Loop 是一个很重要的概念,指的是计算机...
    99+
    2024-04-02
  • 什么是​事件循环event loop
    这篇文章给大家介绍什么是事件循环event loop,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。事件循环event loop。一个老生常谈的问题,之所以拿出来说,推荐的原因在于:通过...
    99+
    2024-04-02
  • JS 中的 Event Loop 是什么你真的懂
    目录setTimeout 定时器并不准宏任务和微任务一道经典异步题结尾Event Loop,简单翻译就是 事件循环,是 JS 语言下实现运行时的一个机制。 JS 的异步并不...
    99+
    2024-04-02
  • Javascript的Event Loop怎么实现
    本篇内容主要讲解“Javascript的Event Loop怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript的Event Loop怎么实现”吧!一、...
    99+
    2023-06-22
  • 分析Node.js中的event-loop机制
    这篇文章主要介绍“分析Node.js中的event-loop机制”,在日常操作中,相信很多人在分析Node.js中的event-loop机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • Node.JS中事件轮询(Event Loop)的解析
    当我们知道I/O操作和创建新线程的开销是巨大的! 网站延迟的开销 对于一个网站,后台大多不需要进行复杂的计算,我们的程序大多时间花费在I/O读取上。 看到一个数据:IO操作可以比数据处理慢几个数量级。高...
    99+
    2022-06-04
    事件 JS Node
  • sql中loop是什么意思
    loop 是 sql 中一种控制流结构,允许重复执行语句直到条件为假。它包含:初始化变量或设置循环主体:重复语句退出条件:循环终止条件迭代:退出条件为假时重复循环主体结束:退出条件为真时...
    99+
    2024-04-29
  • javascript事件循环event loop的示例分析
    小编给大家分享一下javascript事件循环event loop的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:js是单线程的,但是event loop的出现,使得js...
    99+
    2024-04-02
  • JavaScript 运行机制详解再浅谈Event Loop
    目录一、为什么JavaScript是单线程?二、任务队列三、事件和回调函数四、Event Loop五、定时器六、Node.js的Event Loop一、为什么JavaScript是单...
    99+
    2024-04-02
  • Node.js中Event Loop各阶段的示例分析
    小编给大家分享一下Node.js中Event Loop各阶段的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Event ...
    99+
    2024-04-02
  • JavaScript 的setTimeout与事件循环机制event-loop
    目录1.先说说我们都知道的setTimeout2.再讲讲我们可能不知道的setTimeoutevent-loop3. node中的时间循环执行顺序4. 关于事件循环中的promise...
    99+
    2024-04-02
  • Flume中的Event是什么
    在Flume中,Event是指从一个数据源发送到目的地的数据单元。一个Event包含了数据本身以及相关的元数据,比如时间戳、主机名等...
    99+
    2024-04-02
  • Node.js事件循环(Event Loop)和线程池详解
    Node的“事件循环”(Event Loop)是它能够处理大并发、高吞吐量的核心。这是最神奇的地方,据此Node.js基本上可以理解成“单线程”,同时还允许在后台处理任意的操作。这篇文章将阐明事件循环是如何...
    99+
    2022-06-04
    线程 详解 事件
  • sql中loop的使用方法是什么
    在SQL中并没有类似于其他编程语言中的循环(loop)结构,因为SQL是一种集合导向的语言,更适合处理集合(表)数据。 在SQL中通...
    99+
    2024-04-22
    sql
  • jquery中event的概念是什么
    这篇文章主要介绍了jquery中event的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jquery中event的概念是什么文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • mysql中event的作用是什么
    MySQL中的事件(Event)是一种在数据库内部实现的调度任务工具,用于执行定期性的SQL语句或存储过程。通过创建事件,您可以指定...
    99+
    2024-04-09
    mysql
  • mysql中event的用法是什么
    在MySQL中,Event是一种用于调度在特定时间执行的操作的机制。通过创建Event,可以在数据库中定期执行一些任务,例如数据备份...
    99+
    2024-03-11
    mysql
  • mysql binlog event格式是什么样的
    mysql binlog event格式是什么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先发起几个事务,生成一个新的...
    99+
    2024-04-02
  • DOM事件中Event对象是什么
    这篇文章主要介绍“DOM事件中Event对象是什么”,在日常操作中,相信很多人在DOM事件中Event对象是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”DOM事件中Ev...
    99+
    2024-04-02
  • oracle中loop循环使用的方法是什么
    在Oracle中,可以使用PL/SQL语言编写循环控制结构,其中包括三种主要的循环语句:LOOP、WHILE和FOR。其中,LOOP...
    99+
    2024-04-09
    oracle
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作