我一直在阅读一些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,网络访问等,都被放入工作线程) .
当你创建的事件被放入一个队列中时,当它被执行时,它会在主事件循环(类型)中运行,但更重要的是,事件本身被放置在事件循环中(将调用它的触发器).
这是V8引擎的所有部分(即事件循环).是什么让Node如此出色,它让数十万个客户端进入同一个循环,并隔离阻塞I/O.
这个主要的关键点是:如果需要做某些事情,节点总是会做一些事情.
与其他框架一样,I/O会阻止其余代码的执行.
基本上,你通常写的几乎任何东西都会发生在事件循环中,但不完全是.意味着要发生的是你的代码运行一次,然后它只是插入事件,然后退出.
那有意义吗?
因此,当您的代码完成运行时,您排队的所有事件(例如,包括更多代码)仍然驻留在事件循环中.
Node与其他所有东西都非常不同,但这是一个很好的解释,可以帮助您入门.
如果你有兴趣,我写了很多关于Quora的细节...... https://www.quora.com/How-good-is-Node-js
只需将Node的事件循环视为在客户端循环的"主要功能"(除了Node在服务器端,您在技术上不需要代码中的事件循环,因为它是基于事件的:).
考虑每个连接作为JS对象的客户端,它再次运行代码,在它自己的地址空间中,使用它自己的变量,但是在同一个过程中,与程序的其余部分完全相同的CPU(你可以聚集这个,但一般来说,这是开箱即用的方式).
工作线程是阻止I/O被分割成的东西,并且使用插件,你甚至可以将工作线程分散到不同的节点服务器(文件I/O,DB I/O,网络访问等,都被放入工作线程) .
当你创建的事件被放入一个队列中时,当它被执行时,它会在主事件循环(类型)中运行,但更重要的是,事件本身被放置在事件循环中(将调用它的触发器).
这是V8引擎的所有部分(即事件循环).是什么让Node如此出色,它让数十万个客户端进入同一个循环,并隔离阻塞I/O.
这个主要的关键点是:如果需要做某些事情,节点总是会做一些事情.
与其他框架一样,I/O会阻止其余代码的执行.
基本上,你通常写的几乎任何东西都会发生在事件循环中,但不完全是.意味着要发生的是你的代码运行一次,然后它只是插入事件,然后退出.
那有意义吗?
因此,当您的代码完成运行时,您排队的所有事件(例如,包括更多代码)仍然驻留在事件循环中.
Node与其他所有东西都非常不同,但这是一个很好的解释,可以帮助您入门.
如果你有兴趣,我写了很多关于Quora的细节...... https://www.quora.com/How-good-is-Node-js