the page about using worker dynos and background jobs上的Heroku开发中心声明您需要使用工作队列来处理API
调用,例如
获取RSS源,因为如果服务器速度很慢,操作可能需要一些时间,并且在Web dyno上执行此操作会导致它阻止接收其他请求.
但是,根据我的阅读,在我看来,Node.js的一个主要观点是,由于其基于事件的异步运行时模型,它在这些条件下不会受到阻塞.
我很困惑,因为这不会暗示在网络动态中进行API调用(异步)是可以的吗?也许这些文档是针对同步模型更普遍的Ruby / Python / etc用例编写的?
NodeJS是
reactor pattern的实现.NodeJS的
默认构建使用5个反应器.一旦这5个反应器用于IO绑定任务,主事件循环将被阻止.
关于NodeJS的一个常见误解是它是一个允许你同时做很多事情的系统.这不一定是这种情况,它允许您在等待IO绑定任务时执行其他操作,一次最多5个.
任何cpu绑定任务总是在主事件循环中执行,这意味着它们将被阻塞.
这意味着如果你的“工作”是IO绑定的,比如把东西放在数据库中那么你可能会因为没有使用dynos而逃脱.这当然取决于你计划一次进行多少事情.请记住,您在主应用程序中放置的任何任务都会从其他传入请求中获取资源.
通常不建议用于这样的事情,如果你有一个工作进行一些处理,它属于一个在自己的进程或线程中执行的队列.