Tag: multithreading

node.jsasynchronous逻辑行为

我正在构build一个CPU密集型Web应用程序,在那里生病写在C ++的CPU密集型的东西,而不是写在node.js中的Web服务器。 node.js将通过插件连接到c ++。 我对一件事感到困惑 – 说每个请求CPU密集型操作的时间是5秒(也许这涉及反转一个巨大的matrix)。 当这个请求通过时,绑定到c ++的node.js会把这个请求发送给c ++代码。 现在这是否意味着node.js在接下来的5秒内不会被捕获,并且可以继续服务其他请求? 我很困惑,因为我听说即使节点提供asynchronousfunction,它仍然是单线程的。 很明显,我不希望node.js被困在5秒钟,因为它是一个巨大的代价。 想象100个请求同时进行这个密集操作。

使用rabbitmq与multithreading之间的差异

如果我错了,请纠正我,但是,我正在Ruby中开发一段时间,其中最明显的缺点之一是缺lessmultithreading。 最近我一直在探索节点js,特别是它的非阻塞IO“function”。 我的问题是: 为什么要使用单线程语言并使用rabbitmq来asynchronous实现,如果只能使用像js这样的multithreading语言,那么可以同时触发1000个请求并同时完成它们? 节点js是否有其他multithreading语言的创新? 我想我真正要问的是:节点js非阻塞IO和multithreading之间有区别吗?

节点背景线程 – 何时获得创build?

我最近在和Node做了相当多的工作,试图build立一个具有一定特性的系统,其中一个是非阻塞/并行性 – 一个Node强大的套装,据我所知。 我不完全理解的是当一个单独的线程被分离出来处理一些处理。 我相当起诉这发生在一个函数调用/callback,但肯定不是全部。 在我的具体情况下,这是一个基于Express的应用程序。 在应用程序启动时,它做了几件事情,包括实例化一个基于RabbitMQ的“总线”,一个将写入总线(objA)的对象和一个订阅总线并处理消息的对象(objB)。 objA将在快速回拨中写入公共汽车 app.put((req,res) => { objA.methodWhichWritesToBus(); }); 我相信在这一点上, objA.methodWhichWritesToBus是在后台/工作线程中执行的 – 不pipe你调用它,而不是主事件循环。 这是唯一发生这种事情的地方吗? methodWhichWritesToBus IO IO instensive(它在另一个盒子上调用一个弹性search服务,并且带回了10到100的成千上万的logging)和大量的链接promise等等,但是没有一个被分离出来,是吗? 如何调用该方法的obj在Expresscallback之外被实例化 – 这是否会影响并行主机? 最后,影响/迫使一个方法等方法“在后台运行”? 我一直在对这个进行testing,现在testing一下,但是所有的testing都在一台机器上,所以很难说出发生了什么事情。 谁能为我澄清这一点?

如何在node.js中编写线程安全代码

这是我的app.js的一部分: var connections = []; function removeConnection(res) { var i = connections.indexOf(res); if (i !== -1) { connections.splice(i, 1); } } 当请求closures时,我调用removeConnection: req.on('close', function () { console.log("connection closed"); removeConnection(res); }); 我不知道上面的代码是否是线程安全的? 我的意思是Node.js是事件驱动的,下面的情况可能吗? 连接是[a,b,c] threadB调用removeConnection 在threadB.removeConnection中:i = 1 threadA调用removeConnection 在threadA.removeConnection中:i = 0 在threadA.removeConnection中:connections.splice(0,1); =>连接是[b,c] 在threadA.removeConnection:connections.splice(1,1); =>连接是[b] 正如你在这种情况下看到的,threadC的连接将被删除,而不是threadB的。 这可以发生吗? 如果是,那么我应该如何修复代码?

节点杀死线程但不处理

我想知道是否可以终止节点应用程序正在执行的线程,但不是进程。 现在,我知道这听起来很奇怪,因为节点是单线程的,但是我正在处理一个处理进程中的.NET应用程序。 而当我用process.exit()终止节点时,整个应用程序被closures,这是我不想要的行为。 我只想节点线程被终止。 老实说,我非常绝望,我甚至尝试过,获取所有应用程序线程的列表,在创build线程在哪​​个节点正在执行之前,然后创build另一个列表,然后删除所有在开始节点之前存在的线程,保持引用剩余的线程,认为它是节点线程。 正如你所期望的那样,结果并不好。 我使用EdgeJS主机节点,如果这有什么区别。 不幸的是,它没有内置的function来终止自己。 哦, server.close()不适合我,出于某种原因。 我在我的节点代码中托pipe一个videostream服务器,如果这个信息可以以任何方式帮助你的话。 感谢所有提前的帮助!

并行运行asynchronous代码

使用aync库,是否可以创build真正的asynchronous任务,而无需使用预先构build的asynchronousI / O函数? 例如,如果运行此代码,它将始终按顺序运行这些函数,因为node.js是“单线程的”。 var async = require('async'); async.parallel([ function(){ console.log('1') }, function(){ console.log('2') }, function(){ console.log('3') }, function(){ console.log('4') } ]); 我们不应该阻止节点 – 是的 – 但node.js运行在单核上。 如果我们想利用其他内核,我们可以产生进程,并以这种方式使用asynchronous库。 除了集群模块之外,是否有其他核心上产生asynchronous进程的最佳实践方法?

NodeJS函数被socketio事件中断

我在看似并发的nodejs游戏服务器中看到了一些奇怪的行为。 这很奇怪,因为Nodejs应该在一个线程中运行,因为它不使用任何并发。 问题是我有一个使用setImmediate()重复调用的更新函数。 在这个函数中,我在两个地方使用了一个数组。 但是,当“disconnect”事件触发时(也就是客户端与服务器断开连接时),同样的数组也会被修改。 所以恰巧在时序alignment的情况下,断开事件在更新函数中访问数组的第一个位置触发,但在第二个位置之前触发,数组被修改,所以服务器在尝试数组时尝试被访问在第二位。 下面是一些可能使这张图片清晰的代码: function update(){ for(var i = 0; i < gameWorlds.length; i++){ gameWorlds[i].update(); console.log("GAMEWORLDS LENGTH BEFORE: " + gameWorlds.length); NetworkManager.sendToClient(gameWorlds[i].id, "gameupdate", gameWorlds[i].getState()); console.log("GAMEWORLDS LENGTH AFTER: " + gameWorlds.length); gameWorlds[i].clearGameState(); } } setImmediate(update); //in the NetworkManager module, the disconnect event handler: socket.on("disconnect", function(){ for(var a = 0; a < sockets.length; a++){ […]

Node.js是单线程这是否意味着我们不能在不同的线程中运行多个Node.js?

我读过一篇文章,说Node.js是单线程的。 问题是如果我们在不同的端口上运行多个Node.js文件? 他们有自己的线程,或者他们都将在主Node.js线程? 有人可以在这个问题上解释一下我现在在黑暗的一面。

在MultiCore系统中的NodeJS

“Node.js仅限于单个线程”。 当我们在多核系统中进行部署时nodeJS会如何反应? 它会提升性能吗?

Nodejs C / C ++会使用多个Core?

我知道NodeJS运行在一个单一的核心。 但是,如果我构build了一个实现了multithreading的NodeJS C / C ++插件,会发生什么? 这个插件会消耗超过一个核心(当它假设)?