Ciao a tutti!

Vi propongo il solito dubbio amletico per quanto riguarda la programmazione di un server concorrente!

Allora, il server deve (ovviamente) gestire diversi client, e per ognuno di essi deve leggere/scrivere anche grandi quantità di dati, che a loro volta andranno scritti/letti in file locali del server.

Tutti i thread condividono lo stesso spazio virtuale, e in esso quindi devono posizionare quanto i buffer per il socket, tanto quelli per le interazioni con i file.
Dato che i dati possono essere anche di grandi dimensioni, i buffer verranno utilizzati per molto tempo.
Inoltre data la proverbiale "lentezza" del client (che potrebbe restare fermo per preparare i dati da inviare, oppure per decidere cosa fare, ...) i buffer potrebbero rimanere allocati per tempi davvero lunghi.

La mia "paura" è che volendo sfruttare le facilitazioni a livello di kernel per quanto riguarda la creazione di thread invece che dei processi, come contro potrei avere la saturazione dello spazio di indirizzamento dell'unico processo attivo, o comunque un riempimento tale da rendere alto l'overhead dovuto allo swapping.

Ovviamente se i client connessi dovessero essere "pochi", essendo file di testo quelli trasferiti, le dimensioni totali rimarrebbero comunque accettabili e i thread potrebbero benissimo gestire il tutto.
Ma, non potendolo sapere a priori, forse è meglio usare una fork() per gestire ogni singolo client?

Vi ringrazio per l'interesse e per le risposte!