Tag: multithreading

专业的Node库如何实现asynchronous执行?

我花了一些时间查看Node Bcrypt ,以及它们如何实现以下asynchronous执行: bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) { // Store hash in your password DB. }); 他们使用asynchronouscallback执行计算量大的任务(盐生成)。 他们如何做到这一点,而不阻塞主节点IO线程? 我已经阅读了process.nextTick(),但是这似乎与在一个线程中分配CPU负载的setTimeout()类似(延迟了piper的支付)。 然后有childProcess.fork(),但我不认为他们正在使用,因为我无法在GitHub仓库的任何地方find它。 另外,你还有像Monk这样的库,可以实现: users.find({ name: 'Loki' }, '-bigdata').then(function () { // exclude bigdata field }) 在这个回购中任何地方都没有fork()出现。 我想为了Monk卸载这种处理将需要一个明确的stream程叉与某种recursion的asynchronouscallback。 我试图在我的应用程序中实现这种asynchronous操作,但想了解专业人员如何做到这一点。 有谁知道要做到这一点?

Node.js支持并行吗?

我一直在研究并发和并行的区别。 Rob Pike在谈到关于并发性和并行性之间的差异时,在YouTube上发表了一个演讲。 他的演讲是在Google Go语言的背景下进行的。 据我所知,并发是能够处理多种事情的devise,而并行则是多个事物同时物理执行。 从我也明白,Node.js作为一个单线程进程运行。 因此,尽pipeNode支持并发执行callback的方式,它是否有能力处理任务的并行执行? 它可以设置为在单独的处理器上运行多个线程?

在Node.js中logging文件:集群安全吗?

如果我在运行此代码的一个盒子上有4个,8个或更多的线程和群集,是否会在日志文件/文件编写器上存在资源争用? 如果是这样,你可以发表一个例子说明? 到目前为止,我所做的所有testing似乎都表明写入的数据不会交织在一起,不会被扔掉,但我并不是完全相信 谢谢! var errLog = fs.createWriteStream(… + '/error.log'); GLOBAL.dbLog = fs.createWriteStream(… + '/db.log');

从NodeJS本地扩展中的不同线程callback

我是nodeJS和节点扩展的新手。 我为节点js写一个本地扩展,它将接收虚函数OnEvent(param1,param2,param3)上的callback。 代码如下: bool MyExt::OnEvent(int eventType, string param1, string param2) { printf("MyExt:: onevent___ \n"); { //// Crashes here, but if I use Locker, it get stuck!!!!!! //Locker l; Local<Value> argv[3] = { Local<Value>::New(Integer::New(1)), Local<Value>::New(String::New("parameter 1")), Local<String>::New(String::New("parameter 2")) }; TryCatch try_catch; //// I need to call this m_EventCallback->Call(Context::GetCurrent()->Global(), 3, argv); if (try_catch.HasCaught()){ printf("Callback is Exception() \n"); […]

杀死node.js工作完成后的function

我是一个刚刚开始修补的node.js新手。 我有一段代码执行一个处理所有cpu核心上的string的函数,我想确定哪个工作者先用id完成了函数,然后杀掉每个工作者(或者只是退出节点)。 以下是我的程序的简化代码: var cluster = require('cluster'), cpus = require("os").cpus().length, // 4 cores myArray = ["foo","bar","baz","qux"]; // 1 string per core if (cluster.isMaster) { for (var i = 0; i < cpus; i++) { var worker = cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else if […]

node.js中的“产生线程”行为

我想添加一些pipe理实用程序到一个小的Web应用程序,如“备份数据库”。 用户将点击一个button,HTTP响应将立即返回,尽pipe潜在的长时间运行的进程已经在后台启动了。 在Java中,这可能会通过使用Actor在Scala中产生一个独立的线程来实现。 但是,node.js中的一个合适的习惯用法是什么? (代码段赞赏) 我现在正在重新阅读文档,这确实看起来是一个节点101的问题,但这就是我在这个地方…无论如何,澄清这是基本情况: function onRequest(request, response) { doSomething(); response.writeHead(202, headers); response.end("doing something"); } function doSomething(){ // long-running operation } 我希望响应立即返回,doSomething()在后台运行。 好吧,考虑到节点的单线程模型,如果不产生另一个操作系统级别的ChildProcess,这似乎是不可能的。 我的误解 在我的代码中,我需要备份的主要是基于I / O的,所以节点应该以一种很好的asynchronous方式处理它。 我想我会做的是将doSomething转移到response.end之后,看看这是怎么回事。

node.js是否在内部使用线程/线程池?

我已经决定熟悉node.js并阅读了几篇关于这个主题的文章。 我还不清楚的是,当你调用node.js函数时,node.js在线程池的线程上创build新线程和/或调度任务。 例如,如果我调用fs.readFile它是在不同的线程上执行? 如果是的话,我怎么能写我自己的函数readFileCustomized或doLongOperation运行在不同的线程?

什么时候Node.js阻塞?

我已经使用了一段时间的Node.js,我刚刚意识到它可以阻止。 我只是不能把我的大脑围绕Node.js阻塞的条件。 所以,Node.js是单线程的,因为(i)Javascript是和(ii)避免了所有的multithreading陷阱。 尽pipe是单线程的,但是要立即做很多事情,它实现了asynchronous执行。 所以,与DB(一般的I / O)交谈是非阻塞的(因为它是asynchronous的)。 但是,所有传入的请求需要做一些工作(即与数据库交谈)以及必须返回给客户端的所有工作结果(即发送一些数据),他们使用该单个线程。 Node.js使用单线程内的“事件循环”来获取所有请求,并将其分配给非阻塞的I / O任务。 因此,由于asynchronouscallback,I / O任务是非阻塞的,但单线程可以阻塞,因为它是同步的,并且由于许多复杂的请求同时出现,事件循环可能被阻塞。 我是对的吗,我是否理解正确? 我猜,我不这样做,因为在这里和这里他们强调“节点是单线程,这意味着你的代码没有并行运行”。 这实际上是什么意思,它是如何使节点阻塞? 那么,事件循环会永远运行,并且总是search请求,或者在发现新的请求后开始执行? 节点阻塞弱点是否会使节点对大型项目无用,并最终只适用于微型站点和小型项目? 非常感谢。

从multithreadingC ++插件callbackNodeJS Javascript函数

我有一个multithreading的C ++插件,做了一些后台处理,我需要定期callback一下我在NodeJS服务器上写的Javascript函数。 我明白,这涉及到使用uv_async_send(),因为它需要在主线程中执行,但到目前为止,我还没有能够弄清楚如何做到这一点。 有一个简单的例子,我错过了吗?

如何使NodeJ使用更多的CPU核心或multithreading而不是单线程

互联网说 节点是单线程的,不会自动使用多核心机器中的单个核心。 这意味着除非您的devise方式不同,否则您的应用程序将无法充分利用托pipe服务器的可用容量。 由此 清除问题? (更新) 简单的问题,没有比较或scalle技巧 – NodeJs可以使用多CPU使用 – 节点使用单线程时会发生什么? – 如果我们在节点多个进程(node1,node2,node3)工作同一台机器,使用4个服务器核心都可以使服务器变慢? – 节点进程发生什么事情,使用相同的内核来争夺CPU资源? 我读了这个然后灵感来问你们.. 🙂 缩放节点 – js-应用程序 – 10个同时连接的数千个 :由Ppetter Corbet http://nodejs.org/api/cluster.html