在NodeJs和JS中将什么函数放入EventLoop

 最好的冰雪之母_227 发布于 2023-01-29 09:03

我一直在阅读一些NodeJs文章,以了解它的异步性质,在此期间我发现了这个并且非常喜欢它Node.js,Doctor's Offices and Fast Food Restaurants - 了解事件驱动编程

有一种叫做EventLoop基于FIFO的队列.他们说当异步函数被击中时,它会被放到EventLoop并继续在那里执行.

我在这里有点困惑.例如,这里说:

实际上,setTimeout和setInterval等异步函数被推送到称为事件循环的队列中.

在同一篇文章中:

Event Loop是一个回调函数队列.执行异步函数时,回调函数将被推入队列.在执行异步函数之后的代码之前,JavaScript引擎不会开始处理事件循环.

但它与此图像不同:

在此输入图像描述

我们来看下面的例子:

console.log("Hello,");
setTimeout(function(){console.log("World");},0);

从我从那些不同的解释中理解的,

    首先说function(){console.log("World");}的是setTimeout()函数的一部分,即回调,将放在EventLoop中.一旦setTimeout完成,它也将执行EventLoop.

    另一个说,整个事情setTimeout(function(){console.log("World");},0);将被放到EventLoop并将被执行...

我现在更加困惑了.它应该是简单的东西,但我想一个好但简单的解释对我来说对以下问题很好:

    上述哪一项是真的?

    什么是EventLoop?比喻,方法,对象等真实的东西?

    如果我想从头开始实现与EventLoop类似的东西,它会如何简单?也许一些代码会很高兴看到.

Nick Steele.. 6

只需将Node的事件循环视为在客户端循环的"主要功能"(除了Node在服务器端,您在技术上不需要代码中的事件循环,因为它是基于事件的:).

考虑每个连接作为JS对象的客户端,它再次运行代码,在它自己的地址空间中,使用它自己的变量,但是在同一个过程中,与程序的其余部分完全相同的CPU(你可以聚集这个,但一般来说,这是开箱即用的方式).

工作线程是阻止I/O被分割成的东西,并且使用插件,你甚至可以将工作线程分散到不同的节点服务器(文件I/O,DB I/O,网络访问等,都被放入工作线程) .

Node如何工作

当你创建的事件被放入一个队列中时,当它被执行时,它会在主事件循环(类型)中运行,但更重要的是,事件本身被放置在事件循环中(将调用它的触发器).

这是V8引擎的所有部分(即事件循环).是什么让Node如此出色,它让数十万个客户端进入同一个循环,并隔离阻塞I/O.

这个主要的关键点是:如果需要做某些事情,节点总是会做一些事情.

与其他框架一样,I/O会阻止其余代码的执行.

阻止与非阻塞I/O.

基本上,你通常写的几乎任何东西都会发生在事件循环中,但不完全是.意味着要发生的是你的代码运行一次,然后它只是插入事件,然后退出.

那有意义吗?

因此,当您的代码完成运行时,您排队的所有事件(例如,包括更多代码)仍然驻留在事件循环中.

Node与其他所有东西都非常不同,但这是一个很好的解释,可以帮助您入门.

如果你有兴趣,我写了很多关于Quora的细节...... https://www.quora.com/How-good-is-Node-js

1 个回答
  • 只需将Node的事件循环视为在客户端循环的"主要功能"(除了Node在服务器端,您在技术上不需要代码中的事件循环,因为它是基于事件的:).

    考虑每个连接作为JS对象的客户端,它再次运行代码,在它自己的地址空间中,使用它自己的变量,但是在同一个过程中,与程序的其余部分完全相同的CPU(你可以聚集这个,但一般来说,这是开箱即用的方式).

    工作线程是阻止I/O被分割成的东西,并且使用插件,你甚至可以将工作线程分散到不同的节点服务器(文件I/O,DB I/O,网络访问等,都被放入工作线程) .

    Node如何工作

    当你创建的事件被放入一个队列中时,当它被执行时,它会在主事件循环(类型)中运行,但更重要的是,事件本身被放置在事件循环中(将调用它的触发器).

    这是V8引擎的所有部分(即事件循环).是什么让Node如此出色,它让数十万个客户端进入同一个循环,并隔离阻塞I/O.

    这个主要的关键点是:如果需要做某些事情,节点总是会做一些事情.

    与其他框架一样,I/O会阻止其余代码的执行.

    阻止与非阻塞I/O.

    基本上,你通常写的几乎任何东西都会发生在事件循环中,但不完全是.意味着要发生的是你的代码运行一次,然后它只是插入事件,然后退出.

    那有意义吗?

    因此,当您的代码完成运行时,您排队的所有事件(例如,包括更多代码)仍然驻留在事件循环中.

    Node与其他所有东西都非常不同,但这是一个很好的解释,可以帮助您入门.

    如果你有兴趣,我写了很多关于Quora的细节...... https://www.quora.com/How-good-is-Node-js

    2023-01-29 09:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有