nodejs适合做数据处理吗?
其实很早就关注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 吧