Nella programmazione dei socket, crei un socket di ascolto e quindi per ogni client che si connette, ottieni un normale socket di flusso che puoi usare per gestire la richiesta del client. Il sistema operativo gestisce la coda delle connessioni in entrata dietro le quinte.
Due processi non possono collegarsi alla stessa porta contemporaneamente, per impostazione predefinita, comunque.
Mi chiedo se esiste un modo (su qualsiasi sistema operativo noto, in particolare Windows) per avviare più istanze di un processo, in modo tale che si leghino tutte al socket e quindi condividano efficacemente la coda. Ogni istanza di processo potrebbe quindi essere a thread singolo; si bloccherebbe solo quando si accetta una nuova connessione. Quando un client si connette, una delle istanze del processo inattivo accetta quel client.
Ciò consentirebbe a ciascun processo di avere un'implementazione molto semplice, a thread singolo, senza condividere nulla se non attraverso la memoria condivisa esplicita e l'utente sarebbe in grado di regolare la larghezza di banda di elaborazione avviando più istanze.
Esiste una tale caratteristica?
Modifica: per coloro che chiedono "Perché non usare i thread?" Ovviamente i thread sono un'opzione. Ma con più thread in un unico processo, tutti gli oggetti sono condivisibili e occorre prestare molta attenzione per garantire che gli oggetti non siano condivisi, o siano visibili solo a un thread alla volta, o siano assolutamente immutabili e le lingue e le lingue più diffuse i runtime mancano del supporto integrato per la gestione di questa complessità.
Avviando una manciata di processi di lavoro identici, si otterrebbe un sistema simultaneo in cui l' impostazione predefinita non è condivisione, rendendo molto più semplice creare un'implementazione corretta e scalabile.