-
-
Save ry/2018811 to your computer and use it in GitHub Desktop.
var http = require('http') | |
var fork = require('child_process').fork; | |
function fib(n) { | |
if (n < 2) { | |
return 1; | |
} else { | |
return fib(n - 2) + fib(n - 1); | |
} | |
} | |
if (process.argv[2] == 'fib') { | |
var r = fib(40); | |
process.send({ result: r }); | |
process.exit(0); | |
} else { | |
var server = http.createServer(function(req, res) { | |
var child = fork(__filename, [ 'fib' ]); | |
child.on('message', function(m) { | |
res.writeHead(200); | |
res.end(m.result + "\n"); | |
}); | |
}); | |
server.listen(8000); | |
console.log("server online at http://localhost:8000/") | |
} |
@ry : the threads_a_gogo version: https://gist.github.com/2031338 is only nineteen lines :
var http = require('http')
var pool = require('threads_a_gogo').createPool(5).all.eval(fib);
function fib (n) {
if (n < 2) {
return 1;
} else {
return fib(n - 2) + fib(n - 1);
}
}
var server = http.createServer(function(req, res) {
pool.any.eval('fib(40)', function (err, data) {
res.writeHead(200);
res.end(data + "\n");
});
});
server.listen(8000);
console.log("server online at http://localhost:8000/")
@ry : And the threads_a_gogo version is almost twice as fast
$ time curl localhost:8000 //the threads_a_gogo version
165580141
real 0m2.550s
user 0m0.004s
sys 0m0.005s
$ time curl localhost:8000 // @ryah version
165580141
real 0m4.723s
user 0m0.004s
sys 0m0.004s
And uses less than 1/4th the memory:
ab -c 10 -n 10 http://127.0.0.1:8000
->
@ry : 11 node processes, 22 threads
11.0+10.9+11.0+11.1+11.1+11.1+11.0+11.0+11.1+10.8+10.2= 120.3 MB
26.3 seconds
0.38 requests/s
threads_a_gogo: 1 node process, 12 threads
29.5 MB
13.2s
0.75 requests/s
And here's a version using threads_a_gogo that uses 14 lines and accepts input: https://gist.github.com/2023979
Pass input via curl localhost:8000/# (i.e. curl localhost:8000/42)
OMG and heres a version with just one line of code
var http=require("http"),pool=require("threads_a_gogo").createPool(5).all.eval(fib);function fib(a){return 2>a?1:fib(a-2)+fib(a-1)}var server=http.createServer(function(a,b){pool.any.eval("fib(40)",function(a,c){b.writeHead(200);b.end(c+"\n")})});server.listen(8E3);console.log("server online at http://localhost:8000/");
Point being.. Lines of code are pointless.
oh god, node fanboys make me wanna puke :[
@kybernetyk your profile just made me puke
in two dozen lines of javascript...