大佬教程收集整理的这篇文章主要介绍了Node.js事件循环,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有几个I / O进程,节点将它们放在外部事件循环中。它们是以序列(最快的第一)处理还是处理事件循环以并发处理(…和在哪些限制)?
Node.js事件循环在单个线程下运行,这意味着您编写的应用程序代码在单个线程上求值。 Nodejs本身通过libuv使用了很多线程,但是在编写nodejs代码时你永远不必处理。
每个涉及I / O调用的调用都需要注册一个回调。此调用也立即返回,这允许您并行地执行多个IO操作,而无需在应用程序代码中使用线程。一旦I / O操作完成,它的回调将被推到事件循环。它将在所有其他回调之前执行,在执行它之前在事件循环上推送。
有几种方法可以对如何将回调添加到事件循环中进行基本操作。
通常你不应该需要这些,但每时每刻都可以是有用的。
> setImmediate
> process.nextTick
在任何时候都不会有两个真正的并行执行路径,所以所有操作本质上是线程安全的。通常会有几个异步并发的执行路径由事件循环管理。
Read More about the event loop
限制
由于事件循环,节点不必为每个传入的tcp连接启动一个新的线程。这允许节点同时服务hundreds of thousands of requests,只要您不为每个请求计算前1000个素数。
这也意味着不要做cpu密集型操作很重要,因为这些操作将保持对事件循环的锁定,并阻止其他异步执行路径继续。
同样重要的是不要使用所有I / O方法的同步变体,因为这些会保持事件循环的锁定。
如果你想做cpu重的东西,你应该将它委托给一个不同的进程,可以更有效地执行cpu绑定操作,或者你可以写它作为一个node native add on。
控制流
为了管理写许多回调,你可能想要使用控制流库。
我相信这是目前最流行的基于回调的库:
> https://github.com/caolan/async
我使用回调,他们几乎驱使我疯了,我有更好的经验使用Promises,bluebird是一个非常受欢迎和快速promise图书馆:
> https://github.com/petkaantonov/bluebird
我发现这是一个非常敏感的话题在节点社区(回调vs promises),所以一定的方式,使用你的感觉将最适合你个人。一个好的控制流库也应该给你异步的堆栈跟踪,这对于调试真的很重要。
Node.js进程将在事件循环中的最后一个回调完成其执行路径并且不注册任何其他回调时完成。
这不是一个完整的解释,我建议你检查下面的线程,它是很新的:
以上是大佬教程为你收集整理的Node.js事件循环全部内容,希望文章能够帮你解决Node.js事件循环所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。