"millions" of concurrent connections might be a little difficult to achieve, but most web servers fall into these architecture types: pre-fork (1 process/1 thread, 1 connection), threaded (1 process/many threads, 1 thread per connection), event-driven (1 process/1 thread, many connections). There are of course hybrids of these, such as apache mpm_worker which is a hybrid of pre-fork and threaded.
In general, pre-fork will handle the fewest number of connections because creating a new process per connection is expensive and consumes a lot of resources. Threaded is a little bit better, but thousands or millions of threads can have a lot of overhead as well. Event-driven systems are typically 1-process/1-thread and use async/non-blocking IO to achieve very high concurrency with minimal resource overhead.
You will probably want to stick to the event-driven family to get close to your "millions of concurrent" goal. Some event-driven apps are limited to 1 CPU. If you are on a multi-cpu machine, you will want to run 1 instance per cpu (some webservers might take care of this for you, while others will require you to script this out and manage it yourself.)