Una "connessione" non è molto più di un record in una tabella.
Finché entrambe le parti hanno un "piano" per instradare i pacchetti l'uno dall'altro, la connessione è "aperta". Non richiede che una delle due estremità abbia un thread dedicato "tenendo aperta la connessione". Richiede solo che la parte finale abbia informazioni sufficienti per instradare ed elaborare i pacchetti ricevuti dall'altra parte.
Detto questo, di solito c'è molta complessità nel gestire le connessioni, proteggerle e smaltirle con garbo. I protocolli possono includere messaggi di chiusura / disconnessione per la Parte A per informare Party B che "Non ti ascolto più". Oppure, al contrario, un protocollo potrebbe chiedere che la Parte A di occasionale dica "Sono ancora qui" se vuole che la Parte B continui ad ascoltare.
Ma anche quelle cose non richiedono un thread dedicato o per-connessione . Una connessione "aperta" richiede solo che qualcosa su entrambe le estremità di una connessione sia in grado di gestire i pacchetti l'uno dall'altro.
Se si desidera ottenere un risultato estremo, è possibile creare un intero sistema che si avvita e avvia una nuova discussione per ogni pacchetto. È possibile mantenere l'elenco delle "connessioni aperte" in un file di testo. Cavolo, se stai progettando l'hardware, potresti persino spegnere la CPU principale e far risvegliare la scheda di rete, eseguire un avvio completo e quindi consegnare il pacchetto alla routine specificata dal tuo tabella "connessioni aperte". E, probabilmente sarebbe molto molto molto lento; ma quelle molto molto connessioni lente sono ancora connessioni "aperte".