4

Heroku Dev Center on the page about using worker dynos and background jobs指出您需要使用 worker 的 + 队列来处理 API 调用,例如获取 RSS 提要,因为如果服务器很慢并且执行此操作可能需要一些时间在网络测功机上会导致它被阻止接收其他请求。

但是,根据我的阅读,在我看来,Node.js 的主要观点之一是,由于其基于异步事件的运行时模型,它在这些条件下不受阻塞的影响。

我很困惑,因为这不意味着可以在 web dynos 中进行 API 调用(异步)吗?也许这些文档是为同步模型更普遍的 Ruby/Python/etc 用例编写的?

4

1 回答 1

5

NodeJS 是反应器模式的一种实现。NodeJS 的默认构建使用 5 个反应器。一旦这 5 个反应器被用于 IO 绑定任务,主事件循环将阻塞。

关于 NodeJS 的一个常见误解是,它是一个允许你同时做很多事情的系统。不一定是这种情况,它允许您在等待 IO 绑定任务时做其他事情,一次最多 5 个。

任何 CPU 绑定任务总是在主事件循环中执行,这意味着它们将阻塞。

这意味着如果你的“工作”是 IO 绑定的,比如把东西放在数据库中,那么你可能不使用 dynos 就可以侥幸逃脱。这当然取决于您计划一次进行多少事情。请记住,您在主应用程序中放置的任何任务都会从其他传入请求中占用资源。

通常不建议这样的事情,如果你有一个做一些处理的工作,它属于一个队列,在它自己的进程或线程中执行。

于 2013-01-21T15:59:31.597 回答