gpt4 book ai didi

node.js - 如何在 Node.js 中使非 IO 操作同步与异步?

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:05 25 4
gpt4 key购买 nike

我知道这个标题听起来像是其他十几个问题的骗局,而且很可能是这样。然而,我已经阅读了这十几个问题,并用谷歌搜索了一段时间,但没有找到令我满意的答案。

这可能是因为没有人正确回答,在这种情况下你应该投票给我。

这可能是因为我很愚蠢并且不理解其他答案(更有可能),在这种情况下你应该投票反对我。

上下文:

我知道 Node.js 中的 IO 操作会被检测到并默认异步运行。我的问题是关于仍然可能阻塞/运行很长时间的非 IO 操作。

假设我有一个带有 for 循环的函数 blockingfunction,它可以执行加法或其他操作(纯 CPU 周期,无 IO),还有很多。运行需要一分钟或更长时间。

假设我希望每当有人向我的服务器发出特定请求时就运行此函数。

问题:

显然,如果我在代码的外部级别显式调用此循环,则所有内容都会阻塞,直到完成为止。

我读过的大多数建议都建议先启动所有其他处理程序/服务器等,然后通过 process.nextTick 推迟调用该函数,从而将其推迟到 future setTimeout(阻塞函数,0)

  • 但是 blockingfunction1 不会只是在执行循环的下一次旋转时阻塞吗?我可能是错的,但这样做似乎会在不阻止应用程序的情况下启动我的所有其他内容,但是当有人第一次发出导致调用 blockingfunction 的请求时,所有内容都会被阻止只要完成即可。

  • blockingfunction 放入 setTimeoutprocess.nextTick 调用中是否会以某种方式使其与 future 的操作共存而不阻塞它们?

  • 如果没有,有没有办法让blockingfunction做到这一点而不需要重写它?

  • 其他人如何处理这个问题?我看到的很多答案都是“只要相信你的 CPU 密集型的东西很快,它们就会很快”,但这并不能令人满意。

  • 缺少线程(我可以保证 blockingfunction 的执行将与其他正在发生的事情的执行交错​​),我应该重写 CPU 密集型/时间吗消耗循环以使用 process.nextTick 来执行固定的、保证快速的每个周期迭代次数?

最佳答案

是的,你是对的。如果您将函数推迟到下一个tick,它只会在该tick中阻塞,而不是当前的tick。

不幸的是,这里没有任何魔法可以为您解决这个问题。虽然可以 fire up that function in another process ,这可能不值得这么麻烦,具体取决于您在做什么。

我建议以这样的方式重写你的函数,让工作发生一段时间,然后在下一个刻度继续。 Node 标记非常高效...如果需要,您可以在适当大小的循环的每次迭代中调用它们,而无需大量开销。当然,您必须在代码中对其进行分析才能查看影响。

关于node.js - 如何在 Node.js 中使非 IO 操作同步与异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com