Suppongo che tu stia usando nginx come proxy inverso. In tal caso, le connessioni parallele che arrivano alla tua app vengono accodate dal sistema operativo. Non dovresti nemmeno contare nginx nella tua equazione perché non puoi mai prevedere quando arriva una connessione. Ciò che controlli è il momento di accettarlo / gestirlo.
La verità è che solitamente l'ascolto delle connessioni viene gestito in un singolo thread, in una sorta di loop. È possibile che la parte di gestione possa o meno essere eseguita in un multi-thread.
Il design semplice e sicuro sotto.
Contaleapprocciononènecessariopreoccuparsidipiùthread.Seunaconnessionediversaarrivanelmezzodellagestionedelprimo,verràsemplicementemessaincodaedovràattendere.
Puoimigliorarequestosescrivilatuaappinmodochelostatopertinentesiamemorizzatoinun'entità/databaseseparatiequindipuoisemplicementeavviarediversiprocessiC++athreadsingolo.
SesiesegueilforkdelprocessoC++osiutilizzaunbackendFastCGI,èpossibilecondividereunsingolosocketdiascoltocheinvieràleconnessioniinentrataapiùistanzediappC++athreadsingolo.
Consigliovivamenteunapprocciomulti-processoacausadellanatura"leaky" e "crashy" del C ++. Se si dispone di più processi, uno di essi potrebbe essere riavviato e / o arrestato in modo anomalo senza compromettere l'intero sistema.
Tra l'altro si ottiene la sicurezza del filetto in base alla progettazione se si gestisce solo una connessione alla volta da un processo. Ciò simulerebbe i server Web Node.JS che hanno la reputazione di essere scattanti.