Created
March 12, 2012 00:17
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/") | |
} |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ry : And the threads_a_gogo version is almost twice as fast