How web-servers parallelise request load?

I recently started thinking about the differences in implementation of different Ruby web servers (Unicorn, Passenger, Puma), and what it means to implement a single server process, a server with multiple threads, and a server with multiple processes. It makes sense conceptually to horizontally scale using threads or processes depending...