Articles of multithreading

在节点js中,什么是libuv,并使用所有核心?

据我所知,所有IO请求和其他asynchronous任务都是由libuv中的nodejs完成的。 我想知道:使用线程是libuv吗? 如果是,是否使用所有可用的核心?

为什么Node.js libuv线程池执行不兼容?

AFAIK Node.jsasynchronous任务被调度到libuv下,libuv有一个线程池,默认情况下有4个线程在池中。 我testing下面的代码: setImmediate(() => { sleep(1000 * 3); console.log('a'); }); setImmediate(() => { sleep(1000 * 3); console.log('b'); }); setImmediate(() => { sleep(1000 * 3); console.log('c'); }); function sleep(time) { let start = new Date().getTime(); while (new Date().getTime() – start < time) { } } 我认为发送到libuv的3个任务将同时执行,并且输出a / b / c应该几乎同时打印,但事实上,每3秒输出一次。 哪里错了? 谢谢。

NodeJS集群:如何减less主人的数据?

我是新的nodejs,我想要的是从数据库和计算读取数据。为了使其更快,我使用nodejs集群模块。 有两个全局variables:pairMap和nameSet,我把这个作业分配给master进程中的worker,他们做一些计算工作(修改map和set,就像map-reduce一样) 然而, 似乎pairMap和nameSet没有被修改并且是空的。 (在doMasterAction中的代码) (另一个奇怪的是我控制数据,它做了修改,但最终,在主进程中返回到空)。 数据如下(我提取主要思想): const Promise = require('bluebird'); const cluster = require('cluster'); const numCPUs = require('os').cpus().length; const fs = Promise.promisifyAll(require('fs')) const utils = { mergeMap:(source,dest)=>{ for(let [key,value] of Object.entries(source)){ if(!dest.has(key)) dest.set(key,value); for(let [type,arr] of Object.entries(value)){ const final = new Set([…dest.get[key][type],…arr]) dest.get[key][type] = final; } } } } /** * key: name1@group.com||name2@group.com * […]

节点线程是模拟循环的错误地点吗?

假设有一个天气模拟器产生/计算天气,每隔0.5秒一次setInterval就会启动并执行一系列计算,以使读数和处理数据成为可读的数据。 然后它会通过套接字触发相关数据login,也许只有当数据实际发生变化时。 那么,将天气模拟/发生器自己运行在subprocess中,并将I / O保存在节点的单线程中会更好吗? 或者,会创buildlocking要求吗?

如何从node-webworker-threads中获得控制台的错误?

我正在开发一个node.js应用程序。 我正在使用webworker-threads包去掉一些CPU阻塞任务。 但是,我的线程代码中未被捕获的错误不会被发送到控制台。 相反,线程只是失败的默默。 最简单的例子说明了这一点: var Threads = require('webworker-threads'); this.testThread = new Threads.Worker( function() { console.log("This is the test thread. The next line should throw an error."); undefinedFunction(); } ); 由于我的实际应用程序正在调用一个单独的js文件作为线程,我也没有看到任何语法错误报告。 是否有一些无证的错误事件我应该赶上? 我的环境可能有问题吗?

检测当前线程是否是libuv默认事件循环的主线程

我正在为Node.js编写一段C代码,并且想要区分asynchronous调用和同步调用。 换句话说,我想要检测我的代码是否在主事件循环中调用的V8事件分派线程上运行,或者是否从某个单独的工作线程调用它。 在前一种情况下,我可以立即调用JavaScript,而在后者中,我必须使用更复杂的asynchronouscallback。 libuv线程API提供了uv_thread_self来标识当前线程,而uv_thread_equal提供了相等的线程比较。 所以我需要find主事件循环的uv_thread_t 。

Node.js集群的工作人员数量

我读了一些关于Node.js集群的文章,通常在例子中,worker的数量与一些CPU核心匹配。 如果我指定更多,会发生什么? 它会带来什么好处?

如何在nodejs中使用dynamic参数进行一系列并行API请求

我想根据存储在数组中的参数值(大约30-40个值),通过更改URL中的单个参数值进行一系列API调用。 我正在使用NodeJS和Express。 以下是我为此写的一个片段: var express = require('express'); var router = express.Router(); var rest = require('restler'); router.get('/myroute', function(req, res, next){ parameterArray = [ /* A list of parameter values in here gathered from two more API calls */]; returnArray = []; for(var i = 0; i < parameterArray.length; i++){ var url = 'https://api.example.org?parameter=' + parameterArray[i]; rest.get(url).on('success', […]

Node.js API函数是否在不同的线程中执行

Javascript是单线程的。 所以我写的每一段代码都是在Node提供的javascript运行时的单线程中执行的。 所以当我执行下面的代码: var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) { return console.error(err); } console.log("Asynchronous read: " + data.toString()); }); // Synchronous read var data = fs.readFileSync('input.txt'); 以下是我对工作stream程的理解,如果我错了,请纠正我的错误: fs.readFile被Node中的pipe理员立即popup调用堆栈,并移动到其他线程开始读取东西。 阅读完成后,Node中的pipe理员 : 将fs.readFile的callback函数fs.readFile队列堆栈中 哪个事件循环最终放入调用堆栈并执行 fs.readFileSync不会popup堆栈,而是像运行其他函数一样在运行时线程中执行。 那么,这个pipe理者是谁,在其他线程中执行Node API I / O函数并pipe理他们的调用栈。 那么Node是否使用多核在后台执行它的API函数呢?

仅在NodeJs上构build网站,在http上构buildExpress阻止请求

在使用Nodejs,Express和Jade模板时,我有一个关于这个例子的问题。 所有示例都显示了如何构build某种用户pipe理界面,您可以在其中添加用户configuration文件,将其删除并进行pipe理。 这些被认为是NodeJ的初学者指南。 我的问题是,如果我有10个用户同时访问相同的接口并执行相同的操作,那么NodeJs将会阻止其他用户在同一个端口上运行的请求。 所以我们假设我正在抽出一个可能类似10000的用户列表。是的,我可以做分页,但这不是重点。 当我从服务器获得列表时,另外4个用户想要访问应用程序。 他们必须等待我的过程结束。 这是我的问题 – 如何避免使用NodeJS&Express? 我在这个问题上好几个月了! 我目前有一些地方做到以下几点: 运行一个端口上的东西的主要处理 在另一个端口上运行一个Socket.io进程 使用粘性会话 这个想法是,我做了一个请求(如获取项目列表),并立即响应一些请求引用,但没有请求的项目,从而释放端口。 在“asynchronous”的背景下,我做了获取物品的过程。 完成后,我做一个HTTP请求从一个节点到套接字节点端口节点发送通过的项目。 当这样做,然后执行一个socket.io与数据和初始请求引用发出,以便正确的用户获取消息。 在客户端,我有一个事件监听socket,然后通过填充列表完成ajax请求。 我在这方面取得了一些成功! 它实际上在一定程度上工作! 我有一个在线问题,由于IP地址,使socket.io玩起来很有趣。 我也有多个使用集群的工人。 我以如下方式使用它: 我创build一个主人 我产卵了工人 我接受任何连接请求并将其传递给相关的工作人员。 我为主节点请求以及套接字请求执行此操作。 就像我说的我使用2个端口! 正如你所看到的,我已经完成了很多工作,而且我没有得到一个合适的解决scheme! 我的问题是这个 – 我走遍了世界各地10次,只是错过了一些简单的东西? 这听起来很复杂,以实现一个非阻塞nodejs唯一的网站。 我问自己 – 当然,所有这些教程都不会错过这样重要的事情! 但他们做到了! 我已经研究,阅读和testing了很多代码 – 这是我第一次在stackoverflow上询问任何东西。 谢谢你的帮助。 PS一个同样的方法的例子是这样的:我要求使用jasper的报告,我传递参数,并与上述的“延迟ajax响应”方法,我只是释放端口,并在后台生成一个非常密集的报告(这可以是非常密集的过程,因为大量的计算正在执行)..! 我真的没有看到更好的方法 – 任何帮助将超级赞赏! 感谢您花时间阅读!