Gonna have to be that guy: the C10K problem was "how to serve 10000 clients from a single server" specifically in the 2000ish time-frame. The article links to the C10K problem page, which discusses the tradeoffs involved in at least five high-level strategies[1], only one of which is the strategy of running a thread per client [2].
[1] http://kegel.com/c10k.html#strategies [2] http://kegel.com/c10k.html#threaded
Thanks!
One minor correction about Erlang is that that scheduler doesn't get invoked just on function calls. It will be invoked as soon as the lightweight process consumes a certain number of allowed operations. So even if you have one huge function that never calls others, just computes something, it will still consume operations and will be preempted. Some internal C utility functions also consume some virtual number of ops as well and may yield.
Now that I reread that section, it also depends on whether you call a BIF or not, I'll think about how to phrase that better in the blog post.
Thanks!