Questo è fondamentalmente un processo rispetto alla domanda di thread, entrambi non sono troppo diversi, a volte i thread sono chiamati processi leggeri. La differenza più grande è che un processo separato ha il suo spazio indirizzo ma ci sono altre differenze (1):
Per processo
- spazio degli indirizzi
- Variabili globali
- Apri file
- Processi secondari
- In attesa di allarmi, interrupt e gestori di segnali
Per filo
- Contatore di programma
- registri
- Pila
- Stato
Sulla base di queste differenze potrebbe essere utile avere un thread client e server nello stesso processo in modo da poter condividere handle di file e variabili globali. Questo sarebbe un argomento per l'approccio "nello stesso processo", un altro (piccolo) argomento sarebbe che si ottiene solo un pop-up "Windows Firewall" per processo. Un argomento per l'approccio del "processo diverso" sarebbe che una persona può eseguire più server senza dover eseguire più client. Questo sarebbe l'ideale per un host dedicato come il set-up ed è un approccio che comunemente vediamo negli sparatutto in prima persona.
Ora, per quanto riguarda l'idea di avere un processo server o thread anche per il gioco off-line (e forse anche per single-player) questa è una grande idea che viene usata molto nella pratica. Puoi dire a molti giochi di farlo guardando la schermata di caricamento, piccoli suggerimenti come "ricezione" lo daranno via. È logico farlo dal momento che se hai intenzione di creare un multigiocatore, la maggior parte delle regole di gioco saranno governate dal server, quindi perché non averle per il giocatore singolo? Ciò riduce il codice che devi scrivere e offre una più chiara separazione tra client e "gioco" che migliorerà la qualità del codice.
Che ne dici di comunicare tra processi e thread? La comunicazione tra processi può essere fatta in molti modi, (named-) pipe, memoria condivisa, COM, dipende davvero dalla tecnologia che stai utilizzando. Tuttavia, se stai creando un server, probabilmente vorrai scegliere una variante di rete che utilizza socket e qualcosa di simile a TCP, ovviamente LIDGREN ti tornerà utile.
Molte di queste tecniche sono valide anche per la comunicazione cross thread. Ma questo dipende ancora di più dalle tecniche che stai utilizzando. Potresti andare di nuovo con TCP, ma forse un sistema ancora più semplice sarebbe eventi e alcuni marshalling, anche se questo potrebbe rendere il tuo ciclo di gioco non deterministico (2).
fonti
- Progettazione e realizzazione di sistemi operativi (il libro MINIX), 3a edizione di Andrew S. Tanenbaum
- Correggi il tuo timestep di Glenn Fiedler: http://gafferongames.com/game-physics/fix-your-timestep/