使用child_process fork进行长时间运行(15 - 30秒)I / O任务(如获取源并将其保存到数据库)是否有意义?
此问题的上下文适用于快速路由,我需要提及的是,在验证了Feed网址后,状态响应会提前发送到浏览器。在发送状态响应之后,继续提取和保存饲料项目,并且显然可能需要一些时间(10-30秒)。这个第二部分应该用子进程分叉吗?
我已经阅读了关于节点带有/不能将作业分配到后台进程的I / O效率的相互矛盾的帖子(不是在SO上),所以我希望对此做出明确的回应。分叉I / O任务是否有意义(而不是CPU密集型任务本身,我认为这是一个单独的问题)
答案 0 :(得分:1)
在一般情况下,Node非常适合处理I / O.由于事件驱动的体系结构,只要I / O密集型操作离开Node(或任何I / O操作,实际上),Node就会忘记该操作,直到所述操作完成(或出现错误)。返回的Event然后返回到单线程Node进程。
以远程数据库和密集查询为例。即使数据库服务器需要几秒钟来查询并返回结果,Node进程只负责构建查询(一个字符串?),并将所述查询放在TCP套接字上。套接字上的数据传输甚至不占用节点进程!然后,Node不关心请求,直到返回的数据完成套接字。 (您可能会在数据库包中看到一些处理,比如将RDBMS结果转换为JSON时)。
可能存在此类问题以及您需要注意的问题。 。 。如果他们出现了绝大多数情况下,Node会很好地处理I / O. (发布一些链接到所述文章,在你的问题中或作为这个答案下的评论。)
分叉子进程通常保留用于高CPU任务,这会降低主事件循环的速度。可能还有其他原因,但总的来说,"