Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 是否为I/O任务选择子进程fork或不选择fork?_Node.js - Fatal编程技术网

Node.js 是否为I/O任务选择子进程fork或不选择fork?

Node.js 是否为I/O任务选择子进程fork或不选择fork?,node.js,Node.js,在长时间运行(15-30秒)的I/O任务(如获取提要并将其保存到db)中使用子进程fork有意义吗? 这个问题的上下文是针对快速路线的,我需要提到的是,在验证提要url之后,状态响应会提前发送到浏览器。在发送状态响应后,feed项的获取和保存将继续进行,显然需要一些时间(10-30秒)。第二部分是否应该与子进程相结合 我读过关于节点I/O效率的自相矛盾的文章(不是这样的),其中有/没有将作业分给后台进程,所以我想对此有一个明确的回应。分叉I/O任务(不是CPU密集型任务本身,我认为这是一个单独的

在长时间运行(15-30秒)的I/O任务(如获取提要并将其保存到db)中使用子进程fork有意义吗?

这个问题的上下文是针对快速路线的,我需要提到的是,在验证提要url之后,状态响应会提前发送到浏览器。在发送状态响应后,feed项的获取和保存将继续进行,显然需要一些时间(10-30秒)。第二部分是否应该与子进程相结合


我读过关于节点I/O效率的自相矛盾的文章(不是这样的),其中有/没有将作业分给后台进程,所以我想对此有一个明确的回应。分叉I/O任务(不是CPU密集型任务本身,我认为这是一个单独的问题)有意义吗?

在一般情况下,节点非常适合处理I/O。由于事件驱动的体系结构,一旦I/O密集型操作离开节点(或者任何I/O操作,实际上),节点就会忘记该操作,直到所述操作完成(或有错误)。然后返回的事件返回到单线程节点进程

以远程数据库和密集查询为例,即使数据库服务器查询和返回结果需要几秒钟,节点进程也只负责构建查询(字符串?),并将所述查询放在TCP套接字上。套接字上的数据传输甚至不占用节点进程!然后,在返回的数据通过套接字到达之前,节点对请求毫不关心。(可能有一些处理您在DB包中看不到,比如当RDBMS结果转换为JSON时)

可能会有这样或那样的情况出现,你必须注意。绝大多数情况下,Node都能很好地处理I/O。(在你的问题中,或在回答下面的评论中,发布到上述文章的一些链接。)


分叉子进程通常是为会减慢主事件循环的高CPU任务保留的。可能有其他原因,但“一般而言”。

明确无误,具体到细节。我们会注意一些特殊情况。谢谢clay。