if at a low level it's simple. The main process listens to a socket and does accept. Then there are 2 options: to multiplex requests (from an array to select sockets ready to read using select/epoll and do a recv or accept depending on what the socket is ready to provide the data) or you can push the handling socket to a private thread/process. The process is safer because if it falls then the server this doesn't matter.
And then have to go optimize. The same nginx uses multiplexing within processes-workarou. Multiplexing allows more rationally to use resources within a single process, but several processes allow you to process more requests in parallel. At the same time, the processing of these queries does not affect the main process listens to the socket for new connections.
About the very workarou. As a fork of a new process, yet the operation is not that cheap, is such a practice as prefork. That is in memory already spinning a certain number of ready processes and the appearance of processing requests they just transferred there. Increasing the number of queries increases the number of workarou that minimizes the loss from blocking processes...
generally googling about the problem 10k, you can Google a bunch of algorithms for processing queries.
As for the lighttpd documentation describes cases when you need to use multiprocessing, and the possible problems with the modules. It tips "no use" there is not present.