nodejs适合做数据处理吗?
发布于 12 年前 作者 ntop001 11118 次浏览 最后一次编辑是 8 年前

其实很早就关注nodejs 和 cnodejs了但是一直没敢注册(因为这个社区里面都是大牛啊),但是却一直在关注着,做点东西都是东拼西凑,到最后尽然还 work 了~~

深入的越多,就越想做更多的事情~于是便有了下面的问题,用nodejs做数据处理~我觉得还是很勉强的。

比如我写一个for 循环:

for(int i = 0; i< 1000000; i++){    
     processString("hello world");
 }   
 processString(var str){//这是一个异步的方法~
         var ss = str+str+str+str;
 }

这样不就会出问题吗? for循环执行的瞬间就会产生大量的对 processString(var str)的调用,然后由于 var ss = str+str+str+str;这个操作,内存急剧扩张~ 然后程序不就挂掉了吗?

但是如果这是一个非异步线程的程序,顺序执行下来,却是一点事情都没有的~

一直没有想明白,求各位大神指教~~而且homework 也没有做够,顺便求些推荐的书和学习站点。

6 回复
// 初始化Jscex
var Jscex = require("jscex");
require("jscex-jit").init(Jscex);
require("jscex-async").init(Jscex);
require("jscex-async-powerpack").init(Jscex);
var Jscexify = Jscex.Async.Jscexify;

// 异步方法,最后一个参数为回调函数,接收两个参数:err, data
var processString = function (str, callback){
  var ss = str + str + str + str;
  setTimeout(function () {
    callback(null, ss);
  }, 50);
}
// 转化成Jscex任务
var processStringAsync = Jscexify.fromStandard(processString);


// 程序入口函数
var main = eval(Jscex.compile("async", function () {

  // 像调用同步方法一样写程序,使用$await()来等待程序返回
  for (var i = 0; i < 1000000; i++) {  
    var ret = $await(processStringAsync('hello world! ' + i));
    console.log(ret);
  }
  
}));
main().start();

Good, 估计会有人这样回复,用jscex把异步转同步,实际上我也是这么做的~但是不知道这是不是一个普遍的问题~

ls转成同步是一个办法,也可以设置一个工作池,只允许最多N个异步线程(进程)同时执行。前者可以看作后者的特殊化(N=1)。

瞬间之后木有内存释放这一说么?

这个要怎么做呢??

用nodejs 的 async /await 异步转同步 ,不过说实话,js 这个语言真的不太适合做数据处理,浮点运算很差,还是用java python 吧

回到顶部