Articles of 多处理

是否使用recursionprocess.nexttick让其他进程或线程工作?

技术上,当我们执行下面的代码(recursionprocess.nexttick),CPU使用率将达到100%或接近。 问题是想象我正在一台CPU上运行,另一个节点HTTP服务器正在工作,它是如何影响它的? 线程做recursionprocess.nexttick让HTTP服务器工作吗? 如果我们有两个线程的recursionprocess.nexttick,他们都得到50%的份额? 因为我不知道有一个核心的任何机器不能尝试它。 而且由于我在这种情况下对线程之间的CPU时间共享的理解是有限的,所以我不应该用具有4个CPU核心的机器来尝试它。 function interval(){ process.nextTick(function(){ someSmallSyncCode(); interval(); }) } 谢谢

“使用Node.js进行直接响应” – 使用不同的Node.js进程发送HTTP响应(与主进程不同)

使用Node.js服务器,我想知道是否可能,并build议发送来自委托工作进程,而不是主进程的HTTP响应。 这些工作进程可以是Node.js服务器本身,也可以是通过IPC进行通信的Node.jssubprocess。 我不认为集群核心模块https://nodejs.org/api/cluster.html可以做我想做的事情,因为在该模型中,所有的工作人员都在同一个端口上侦听,并且他们处理所有的请求代表主人的过程。 我正在寻找的是一个主要的Node.js进程,它响应所有的HTTP请求,可能会进行身份validation并处理一些请求,但也能够将数据密集型或CPU密集型请求委托给工作池。 想象一下,我们对大量的数据有一个GET请求,比如2-3MBs。 我们至less有三种可能的情况: 主进程接收到请求,向数据库请求大量的数据,然后将数据发送回请求者。 主进程接收到请求后,使用IPC将一些数据发送给工作进程,工作人员从数据库获取数据做了一些繁重的操作,然后工作人员使用IPC将所有3MB的数据全部发送回主进程,然后发送回应。 主进程接收请求,向工作人员发送尽可能less的关于请求stream的信息,工作人员完成所有工作,工作人员发回HTTP响应。 我特别好奇#3可能。 情景3的简单描述如下: (要明确一点,我不想要一个请求的三个响应,我只是想表明一个工作人员可能代表主进程发送响应)。 任何人都知道这可能与Node.js工作? 它如何在其他语言中起作用? 通常,我对Node.js并发模型没有任何问题,但对于某些types的数据,使用Cluster模块可能不是实现最高并发性的最佳方式。 我相信这个模型的一个术语是“直接回应”,意思是工作人员直接回应请求。 也许可以简单地使用集群核心模块https://nodejs.org/api/cluster.html 。

在NodeJS中处理长时间运行的进程?

我已经看到一些较旧的post涉及这个主题,但我想知道当前,现代的方法是什么。 这个用例是:(1)假设你想在一个video文件上做一个长时间运行的任务,比如60秒 ,说jspm install可能需要60秒。 (2)你不能细分任务。 其他要求包括: 需要知道任务何时完成 很高兴能够停止正在运行的任务 稳定性:如果一个任务死亡,它不会closures服务器 需要能够处理100个同时请求 我见过这些解决scheme: nodejssubprocess webworkers 光纤 – 不用于CPU绑定的任务 生成器 – 不用于CPU绑定的任务 https://adambom.github.io/parallel.js/ https://github.com/xk/node-threads-a-gogo 任何其他? 现代的,基于标准的方法是什么? 而且,如果nodejs不适合这种types的任务,那么这也是一个有效的答案。

Node.js child_process.fork()在不同的CPU核心上运行

我有一个运行长时间执行的进程的应用程序。 为了使它更快,我做了简单的数据分片,并且希望并行地运行它们,只需通过.fork()2个相同应用程序的实例。 我在那里有2个Cores机器,并且要确保2个Cores被利用,第一个实例在第一个核心上运行,第二个在第二个核心上运行。 我知道cluster模块,但在这种情况下似乎不相关,因为我不需要HTTP服务运行和它们之间的负载平衡。 只是工作人员(意思是说,他们不需要彼此沟通,发送消息或任何 – 他们只是做HTTP请求和存储数据到数据库)。 有没有可能控制node.js进程需要哪个CPU核心? 如何监视在Mac / Linux?

Nodejs集群和expressjs会话

我试图构buildnodejs应用程序,它将利用多核机器(又名集群),我有一个关于会议的问题。 我的代码如下所示: var cluster = exports.cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died. Trying to respawn…'); cluster.fork(); }); } else { //spawn express etc } 我的问题是:每次单个用户点击随机节点实例,或者例如他第一次打开页面并击中节点N4,直到他的会话到期,他每次请求都击中节点N4? 对于那些不理解我的问题的人,我会试着解释我所担心的:用户进入我的页面,他在N3节点上login,然后将req.session.userdata设置为一个随机数据,他刷新页面,他击中节点N4,我将能够访问不同节点的req.session.userdata? 这意味着用户有机会随机注销,或者我只是不了解如何与快递作品集群?