iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > 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://www.lsjlt.com/news/86289.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么是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
  • 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
  • jquery中event的概念是什么
    这篇文章主要介绍了jquery中event的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jquery中event的概念是什么文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • sql中loop的使用方法是什么
    在SQL中并没有类似于其他编程语言中的循环(loop)结构,因为SQL是一种集合导向的语言,更适合处理集合(表)数据。 在SQL中通...
    99+
    2024-04-22
    sql
  • mysql中event的用法是什么
    在MySQL中,Event是一种用于调度在特定时间执行的操作的机制。通过创建Event,可以在数据库中定期执行一些任务,例如数据备份...
    99+
    2024-03-11
    mysql
  • mysql中event的作用是什么
    MySQL中的事件(Event)是一种在数据库内部实现的调度任务工具,用于执行定期性的SQL语句或存储过程。通过创建事件,您可以指定...
    99+
    2024-04-09
    mysql
  • mysql binlog event格式是什么样的
    mysql binlog event格式是什么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先发起几个事务,生成一个新的...
    99+
    2024-04-02
  • DOM事件中Event对象是什么
    这篇文章主要介绍“DOM事件中Event对象是什么”,在日常操作中,相信很多人在DOM事件中Event对象是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”DOM事件中Ev...
    99+
    2024-04-02
  • js在浏览器中的event loop事件队列示例详解
    目录前言认识一个栈两个队列执行过程简单例子难一点的例子总结前言 以下内容是js在浏览器中的事件队列执行,与在nodejs中有所区别,请注意。 都说js是单线程的,不过它本身其实不是单...
    99+
    2024-04-02
  • oracle中loop循环使用的方法是什么
    在Oracle中,可以使用PL/SQL语言编写循环控制结构,其中包括三种主要的循环语句:LOOP、WHILE和FOR。其中,LOOP...
    99+
    2024-04-09
    oracle
  • void loop在c语言中什么意思
    void loop函数是arduino编程中用于执行无限循环任务的关键函数。它在程序启动时自动调用,并在运行期间不断重复执行,用于执行主要任务,如读写传感器值、控制执行器、处理输入和更新...
    99+
    2024-05-10
    git c语言
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作