Skip to content

Instantly share code, notes, and snippets.

@ry
Created March 12, 2012 00:17
Show Gist options
  • Star 32 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save ry/2018811 to your computer and use it in GitHub Desktop.
Save ry/2018811 to your computer and use it in GitHub Desktop.
a proper fibonacci server in node. it will light up all your cores.
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/")
}
@xk
Copy link

xk commented Mar 14, 2012

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

@teddziuba
Copy link

@phyreman
Copy link

@ry @xk

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)

@3rd-Eden
Copy link

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.

@kybernetyk
Copy link

oh god, node fanboys make me wanna puke :[

@hems
Copy link

hems commented Nov 5, 2014

@kybernetyk your profile just made me puke

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment