Multiprocessing, multithreading and evented I/O: the trade-offs in Web
servers.
A Web server needs to support concurrency. The server should service
clients in a timely, fair manner to ensure that no client starves
because some other client causes the server to hang. Multiprocessing
and multithreading, and hybrids of these, are traditional ways to
achieve concurrency. Node.js represents another way, one based on system libraries
for asynchronous I/O, such as epoll (Linux) and kqueue (FreeBSD). To
highlight the trade-offs among the approaches, I have three echo servers
written in close-to-the-metal C: a forking_server, a threading_server
and a polling_server.