The JavaScript server environment
node.js has an intriguing approach to coding: Do other things while waiting for results from, say, a database. But don’t use threads to juggle those things, use continuations. This is similar to what client-side JavaScript code (such as Ajax calls) already looks like. Not having to create threads saves a lot of overhead when loads are high. Multi-core and multi-processor systems can still be supported, by scheduling one “instance” of node.js per core/processor.

The only problem with node.js code: You get one nested function expression for each outside request you make.

This is reminiscent of multi-threading and blocking, but it works cooperatively (no preemptive multi-tasking). The similarities don’t end there: You can also do
fork-join as follows:

var [foo, bar] = yield join(io.doFirst(param1),
io.doSecond(param2));

That way, you can perform both operations in parallel, but still only continue after both have finished. The library is based on
generators [3], a JavaScript feature that is already in Firefox and might make it into the next version of the ECMAScript standard [4].