Tag: multithreading

uv_queue_work不在节点插件(c ++)中运行callback_method

我正在C ++中创build节点插件,我希望能够从其他线程进行callback。 要尝试它,我使用uv_queue_work和Nan进行以下testing。 如果我调用函数Hello,它应该为方法firstMethod启动一个新的线程,当它完成时,在另一个线程中调用下一个方法“callbackMethod”,在那里我将做一个callback到Javascript。 但由于某种原因,它运行第一种方法,而不运行第二种方法。 这是我的代码。 void Hello(const v8::FunctionCallbackInfo<v8::Value>& args) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope scope(isolate); v8::Local<v8::Function> callback; callback = args[0].As<v8::Function>(); ListBaton* baton = new ListBaton(); baton->callback = new Nan::Callback(callback); uv_work_t* req = new uv_work_t(); req->data = baton; uv_queue_work(uv_default_loop(), req, firstMethod, callbackMethod); } void firstMethod(uv_work_t* req) { std::cout << "Entering PRE thread" << std::endl; […]

nodejs:worker disconnect()按预期工作

我有一个请求路由“/断开连接”时试图断开工作人员与群集。 即使主人正在接收工人的断开连接事件,工作人员也不会断开连接。 工人 var express=require("express"), app=express(), http=require("http"), server = null; app.get('/disconnect',function(req,res){ var worker = require('cluster').worker; setTimeout(function(){ // disconnect from the cluster if(worker) worker.disconnect(); }, 2000); res.send("Worker " + worker.id + " is disconnecting "); }); server = http.createServer(app).listen(3000); server.on('close', function() { console.log("server asked to close"); }); LOG > node app/app_cluster.js CLUSTER: Worker 1 started CLUSTER: […]

节点群集:仅将任务处理给一个工作者

我正在尝试将群集设置为multithreading我的应用程序,而不是委派每个工作人员一个任务,而是将每个任务委派给所有工作人员。 我的代码如下所示: //main.js var cluster = require('cluster'); //Code executed by the master process. if (cluster.isMaster) { var numWorkers = require('os').cpus().length; console.log('Setting up ' + numWorkers + ' workers.'); for (var i = 0; i< numWorkers; i++) { cluster.fork(); } cluster.on('online', function(worker) { console.log('Worker ' + worker.process.pid + ' is online'); }); //Spawn a new worker […]

node.js非阻塞POST请求等待另一个POST请求

所以我正在开发一个基于文本的游戏,在这个游戏中,用户向用node.js写的服务器发送post请求。 但是,我需要让第一个玩家等待第二个玩家,然后才能提交回复。 现在的问题是,一旦我打电话给我的请求后,我不能发送任何回应的另一个post请求。 看来第一个线程阻止了更多的未来请求。 什么应该使用callback和asynchronous。 如果可能,我不想使用套接字,因为这会限制玩家可以编码的语言。 var newGame=0; //joins new game (username,password) app.post('/game/join', function(req, res) { var username = req.body.username; var password = req.body.password; if(newGame==1){ res.send('Game Started'); newGame=0; } else{ newGame=1; wait(username, function(){ res.send('Game Started'+username); }); } }); function wait(username){ while(newGame==1){ console.log(username + newGame); } }

如何充分利用Node.js Web Apps的服务器容量

最新的Node.js版本(4.2.3)现在是否支持multithreading? 很难find有用的答案,因为多数相关的讨论是从几年前。 一个node.js云服务器如何处理node.js Web App请求? 假设一个2-Core服务器运行一个node.js应用程序,这是否意味着不pipestream量有多大,它们都通过一个单核而通过,另一个核心总是空闲? 如果答案是肯定的,一些第三方库的任何build议都可能实现node.js Web Apps的multithreading化? 感谢您的帮助。 除了上面的问题。 我采用了集群代码到一个Express.js的networking应用程序,结果是else块在下面的代码部分没有执行。 var app = require('../ app'); var debug = require('debug')('NewExpress:server'); var http = require('http'); var cluster = require('cluster'); var numCPUs = require('os')。cpus()。length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) […]

Node.js,进程和线程的问题

进程是否至less有一个线程正在运行? 如果是这样,那么Node.js将默认有1个主线程和1个事件循环线程运行?

nodejs中有多less个工作线程?是否可以修改数字以获得更好的性能?

据我所知,nodejs不是单线程的。 在后台,一个工作者线程池正在循环执行不能由epoll等完成的长期io任务。但是在后台有多less线程? 我找不到任何文件来grep数字。 如果我想要nodejs与mysql数据库合作,应该有多个线程来执行长期的查询任务。 如果只有一些nodejs提供的线程,一些sql查询就会阻塞,这是非常危险的。 所以我应该非常小心mysql模型定义和sql查询性能,而这真的是一种专门的工作。

Node.js是单线程的还是不是?

我已经读过Node.js处理模型,该节点只是使用事件循环接受请求,并将工作交给正在执行asynchronous操作的c ++工作线程。 我还读到: 节点不是单线程的。 在节点中,除了代码之外,所有的东西都是平行的 在节点中,如果你使用settimeout函数,那么在这个时候什么都不会起作用。 我已经做了一些研究,但不能得出结论。 我的问题是: 如果节点使用c ++工作线程,你怎么能说它是单线程? 除了我们的代码,一切都是平行的? settimeout事情是否真实?

节点child_process vs Heroku worker

试图让我的头脑围绕着Node和Heroku上的工作者线程。 从Node.js中调用exec会发生什么? 相信这是在单独的线程上运行,并且不阻止主事件循环是否正确? require('child_process').exec(cmd, function (err, stdout, stderr) { // … do stuff }); 如果在Heroku上,把这个移动到一个单独的工作者有什么好处吗? 例如 如果计算密集,child_process会减慢主应用程序的速度吗? 工人dynos得到自己的内存限制? 一个未被捕获的错误(天堂禁止)不会崩溃的主要应用程序,如果在一个工人?

如何优先处理其他密集型服务器相关任务的快速请求/响应

我的节点应用程序目前有两个主要模块: 刮板模块 一个快递服务器 前者是非常服务器密集型的任务,在循环中无限地运行。 它从100多个url上截取信息,将数据压缩成一个mongodb数据库(使用mongoose)。 这个过程一遍又一遍地运行。 :P 后一部分,我的express服务器,对http / socket get请求做出响应,并将由scraper写入db的crunched数据返回给发出请求的客户端。 我想优化我的服务器的性能,以便快速请求和响应优先于服务器密集型任务。 客户应该能够尽快获得所需的数据,而不会让刮板吃掉所有的服务器资源。 我虽然把服务器密集型任务或快递服务器放到自己的线程中,但后来我偶然发现了cluster和child processes ; 现在我完全糊涂哪种方法适合我的情况。 我所得到的好处之一是在我的申请的写作部分和阅读部分之间有明确的分离。 刮板写入的东西数据库,明确表示读取数据(无后/ put /删除/ …)调用是暴露的。 所以,我觉得我不会遇到不同线程尝试写入同一个数据库的线程问题。 有什么好的build议? 提前致谢!