tagg2
Version:
full name is threads_a_gogo2,it is a cross platform support, Simple and fast JavaScript threads for Node.js
76 lines (47 loc) • 1.6 kB
JavaScript
var Threads = require('../build/Release/threads_a_gogo.node');
var path = require('path');
var string_to_object = require('./string_to_object');
var blank_func = function(){};
module.exports = function(func,opt,callback){
var cb = function(err, result){
if(err) return callback(err);
callback(null, string_to_object(result));
}
if(opt.poolsize){ //如果使用线程池,则返回线程池实例
//wait for coding
var thp = Threads.createPool(opt.poolsize);
thp._alleval = thp.any.eval;
thp._alleval(func, opt.buffer, cb, opt.dirname);
thp.dirname = opt.dirname;
thp.pool = function(func, buf, callback){
var that = this;
if(arguments.length === 1){
buf = new Buffer(0);
callback = blank_func
}
else if(arguments.length === 2 && 'function' === typeof buf){
callback = buf;
buf = new Buffer(0);
}
func = '('+func.toString()+')()'; //组装在线程中运行的函数
buf = buf || new Buffer(0);
callback = callback || blank_func
var dirname = that.dirname || path.dirname(module.parent.parent.parent.filename);
var cb = function(err, result){
if(err) return callback(err);
callback(null, string_to_object(result));
}
return that._alleval(func, buf, cb, dirname);
}
delete thp.emit
delete thp.any.eval;
delete thp.all.emit;
return thp;
}
else{ //如果不使用线程池
var th = Threads.create();
th.eval(func, opt.buffer, cb, opt.dirname);
th.eval = null; //不讲eval接口暴露给用户
return th;
}
}