>Ha az egyik szál blokkolva van, IO-ra vár, akkor lehet csinálni mást
Úgy képzelem, hogy a statikus fájlok kiszolgálása esetén a fájlok nagyon hamar valami hot cache-ben végzik RAM-ban - akár az nginx processzben, akár a kernelben, de valahol a RAM-ban lesz a válasz minden kérésre. Ezek a szálak nem fognak blokkolni.
Amikor pedig továbbhív az nginx egy másik kérésen keresztül a valódi web szerver felé, akkor ezek non-blocking io-ban lesznek végződtetve, ami szintén azt jelenti, hogy nem lesz blokkolás.
(Olyan szervert nem használnék, ami nem tud nonblocking IO-val proxyzni, mert ott valóban kiszámíthatatlan a szükséges szálak/processzek száma.)
Tehát ha jól van megtervezve a rendszer, akkor nincsen benne blokkolás, ergó nincs értelme több szálat indítani mint amennyi végrehajtó szál a CPU-ban van.
Nem tudom, hogy milyen módon kell mérni ezt apache vagy nginx esetén, de valahogy ezeket a statisztikákat meg kell szerezni, hogy mennyi a várakozás és mennyi az aktív CPU használat. És ebből lehet következtetni, hogy mennyi az ideális száma a szálaknak. Egy alternatív megközelítés lehet, hogy simán bekonfolod a CPU szálak számára és reménykedsz, hogy jó lesz, mert 99%, hogy jó lesz. Ha meg nem jó, akkor allokálsz egy fix mennyiséget, amit addig növelsz míg jó nem lesz. A lényeg, hogy legyen egy fix korlát, amivel még stabil a rendszer, hogy emiatt ne rohadjon le. Nem feltétlenül kell ezt túlgondolni.