Tag: multithreading

Node.JS不同的asynchronous链怎样才能让共享variables没有问题?

我着迷于Node JS,并且已经开始潜入,但是,来自Java背景,我被下面的例子搞混了,在这个例子中,一个asynchronous调用链依靠一个共享variables来跟踪(这样来确定何时他们已经完成了另一个行动)。 我很抱歉,如果这个问题是过分基本的,但是我一直在寻找这个,并没有find解释,我可能不会使用正确的条款。 如果你在Java中做了这样的事情,你需要使variablesn同步,以避免碰撞,否则它的完整性可能会受到损害(这只是基于pseduo代码,基于一些更复杂的例子,如果它不是完美的, var n = 100 var funct_a = function(callback) { return function() { if (n == 0) callback() else n– } } for ( a in someArray) { funct_a (function() { //do something with variable a… }) } 它们是否只在一个“线程”中运行,因此它们实际上并不是在不同的CPU核上运行,而是不能实际同时写入该variables? 对于我来说,这似乎是唯一合乎逻辑的解释,可以解决这些types的冲突的一些核心节点服务器逻辑。 任何信息,以表明赞赏。

如何在nodejs中中断超时运行的方法?

使用内置支持线程的语言似乎是一个相当简单的任务,但是, 有没有办法终止/超时长时间运行的方法/无限recursion方法? 例如,如果我有一个以callback为参数的API,并且在调用之前和之后做一些处理并返回结果。 function api(data,callback) { processedData = before(data); result = callback(processedData); processedResult = after(result); return processedResult; } 如果臭名昭着的开发人员跟随这个APIcallback function cpuFrenzy(data) { while(true); } result = api( {} , cpuFrenzy); render(result); 和API的结果是用来呈现HTML。 节点js是单线程将阻止所有请求到服务器! 那么是否有任何方法让api超时/终止callback方法的执行,如果超过预设时间,为了避免阻止所有的web请求? 如果没有,有没有其他方法来实现这个API?

单线程事件驱动的web服务器(如node.js)如何在套接字级别上工作?

所以我不断地从朋友那里听到node.js如何使用单个线程完成所有的事情。 因此,我认为这意味着它通过循环线程接受新的套接字连接,等待一个“接受”方法(像大多数Web服务器),然后而不是委托它接收的套接字到一个新的线程处理,它以某种方式得到一个单线程来处理所有的连接。 每个人都告诉我,事实并非如此,事实上它是事件驱动的 – 所以事情只发生在需求上(即来自客户端的请求)。 但是,在最低级别的套接字上工作,我明白,通常如果你想立即回应请求,你需要有一个线程坐在和阻塞从它正在等待的套接字读取。 所以我的问题是,节点如何实现这个? 是否有一个后台线程不断检查后台中的每个“事件”套接字连续传入的数据,并在出现事件(即产生一个新线程处理它)时作出反应? 节点实际上是单线程的,还是我误解了单线程的含义?

Node.JS中的事件循环有多可预测性

如果你这样观察简单的客户端JS,直观的是,如果我们运行setTimeouts,时间长度(在本例中为0 ms)决定了JS运行时间实际上将它加到队列中的时间间隔是多less这里 。 然而,在Node.JS中,如果我有一些基本上是asynchronous的api调用(如fs.readFile()),并且在同一个代码库中,如果我有一个简单的setTimeout,我的理解是事件循环将开始读取文件,如果已被读取,则继续并将其排队以便一旦主节点线程不进行任何顺序操作就可以触发适当的callback。 我的问题是,只有在特定的超时后仍然保持(与类客户端JS对比),这个“添加setTimeoutcallback”的概念。 具体来说,这里是一个例子: const fs = require('fs'); // Set timeout for 2 secs setTimeout(function() { console.log('Timeout ran at ' + new Date().toTimeString()); }, 2000); // Read some file fs.readFile('sampleFile.txt', function(err, data) { if(err) { throw err; } console.log(data.toString() + " " + new Date().toTimeString(); } var start = new Date(); console.log('Enter loop […]

Node.js数据处理分配

我需要一个使用node.js来分发数据处理的策略。 我试图弄清楚是否使用工作池并将这些工作组中的任务分离出来是最好的方法,或者使用像http://strawjs.com/这样的基于pipe道/节点的系统是最好的方式。 我拥有的步骤如下(针对单个作业): 提取包含GIS ShapeFiles的zip文件 使用ogr2​​ogr将文件转换为GeoJSON 非规范化GeoJSON文件中的数据 将数据转换为我在MongoDB中使用的格式 将数据插入到MongoDB集合中 主要的问题是,当使用像吸pipe这样的基于pipe道/节点的系统时,我不知道如何合并来自不同GeoJSON文件的数据。 我明白如何去做工作池的工作。 但是我不知道如何把工人分配到几台机器上。 我已经尝试过使用asynchronous模块在单个机器上的单线程中进行这种简单的方法。 这适用于小数据集。 但在生产中,我需要能够在相当频繁的时间间隔内支持数百万个文档。 使用node.js的原因是,我们已经有了一个可扩展node.jsstream程的坚实基础架构,我们几乎在生产环境的每个方面都使用node.js。

如何使用Node.js创buildmultithreading应用程序,访问LevelDB?

在LevelUP文档中有这个( https://github.com/rvagg/node-levelup#multi-process-access ): LevelDB是线程安全的,但不适合用多进程访问。 您应该只能从单个Node.js进程打开一个LevelDB数据库。 Node.js集群由多个进程组成,因此LevelUP实例不能在它们之间共享。 所以我不能使用Node Cluster( http://nodejs.org/api/cluster.html ) 是否有另一个选项可以使多进程(或multithreading)Node.js应用程序访问LevelDB数据库?

.NET的Node.js

我知道关于允许C#和Node.js连接的Edge.js这样的项目,但是我正在谈论一些不同的东西。 是否有一个C#库,允许您在C#中构build可伸缩的非阻塞I / O单线程asynchronous事件服务器,类似于可以使用Node.js构build的服务器? 一个库也有Node.js的独特事件模型,单线程用户代码,multithreading文件/networking事件和本地代码(纠正我,如果我错了)。 当然,我知道ASP和WCF,以及这样的OSS项目,但是我正在寻找一些可以与Node.js(一种C#的Node.js端口)相媲美的性能。 你知道任何这样的图书馆,它将需要build设吗? 单线程还是multithreading? 如果您想要一个使用APC和完成端口完成所有工作的单线程托pipe进程,您将不得不手动编写代码。 构build它将是有风险和棘手的。 萨姆·萨尔顿 显然,单线程使代码更容易编写,因为你不需要使用锁和互斥锁。 只有一个线程读取/修改程序状态数据,保持简单。 所有计算都在单独的线程上进行,并在结果准备就绪时返回主线程。 所有文件/networking事件分支出来并在操作完成后返回到主线程。 相关但不同的问题: 非阻塞的单线程Web服务器 最小的Web服务器 单线程asynchronous事件 可能有用的项目: ALE与我想要的最接近,类似于Node.js的语法 Manos de mono ,一个用于C#的单线程服务器 C#中的消息循环 ,处理单个线程上的事件 C#中Libuv的包装( 1,2 ) Anna仅用于HTTP请求(无二进制),语法类似于Node.js

在Node.js插件中使用std :: thread

想象一下,我使用一个同步函数,从我的Node.js插件: var check_ok = addon.my_function(parameters); var final_results = addon.final_function(parameters); 但是在方法代码中我有: std::thread t[10]; //Global //… void my_function(const FunctionCallbackInfo<v8::Value>& args) { //…. t[0] = thread(random_void_function, [parameters]) t[1] = thread(random_void_function_2, [parameters]) //… } //… void final_results(const FunctionCallbackInfo<v8::Value>& args) { //… t[0].join(); t[1].join(); //…Give results.. etc } 所以我有两个同步调用的插件,但在这个插件使用两个线程。 一个函数将启动线程,另一个将join它们。 问题是: random_void_function和random_void_function_2将并行运行? 由于my_function和final_function是同步的,因此random_void_function和random_void_function_2将会阻塞事件循环? 从我看到的,他们不挡。

CRON + Nodejs +多核心=>行为?

我正在build立一个CRON模块到我的服务(使用节点时间表 ),将需要进入我的多核心设置的每个实例,我想知道,因为他们都运行自己的线程,他们都计划运行在同一时间,他们会被调用每一个线程或只是一次,因为他们都加载相同的模块。 如果他们被多次调用,那么确保所需操作只被调用一次的最好方法是什么?

Meteor.setTimeout和Meteor.methods之间的并发性

在我的Meteor应用程序中实现一个基于turnbased的多人游戏服务器,客户端通过发布/订阅接收游戏状态,并且可以调用Meteor方法sendTurn向服务器发送回合数据(他们不能直接更新游戏状态集合)。 var endRound = function(gameRound) { // check if gameRound has already ended / // if round results have already been determined // –> yes: do nothing // –> no: // determine round results // update collection // create next gameRound }; Meteor.methods({ sendTurn: function(turnParams) { // find gameRound data // validate turnParams against gameRound […]