Ini pada dasarnya adalah proses versus pertanyaan utas, keduanya tidak terlalu berbeda, terkadang utas disebut proses ringan. Perbedaan terbesar adalah bahwa proses terpisah memiliki ruang alamat sendiri tetapi ada perbedaan lain (1):
Per proses
- ruang alamat
- Variabel global
- Buka file
- Proses anak
- Alarm yang tertunda, interupsi dan penangan sinyal
Per utas
- Penghitung program
- Daftar
- Tumpukan
- Negara
Berdasarkan perbedaan-perbedaan ini, mungkin berguna untuk memiliki server dan utas klien dalam proses yang sama sehingga Anda dapat berbagi menangani file dan variabel global. Ini akan menjadi argumen untuk pendekatan 'dalam proses yang sama', argumen lain (kecil) adalah bahwa Anda hanya mendapatkan satu pop-up 'Windows Firewall' per proses. Argumen untuk pendekatan 'proses berbeda' adalah bahwa seseorang dapat menjalankan beberapa server tanpa harus menjalankan banyak klien. Ini akan ideal untuk tuan rumah yang berdedikasi seperti pengaturan dan merupakan pendekatan yang biasa kita lihat pada penembak orang pertama.
Sekarang sebagai ide untuk memiliki proses server atau utas bahkan untuk bermain off-line (dan mungkin bahkan untuk pemain tunggal) ini adalah ide bagus yang banyak digunakan dalam praktek. Anda bisa mengatakan banyak game melakukan ini dengan melihat layar pemuatan, petunjuk kecil seperti 'menerima' akan memberikannya. Masuk akal untuk melakukan ini karena jika Anda ingin membuat multi-pemain, sebagian besar aturan permainan akan diatur oleh server, jadi mengapa tidak mengaturnya untuk pemain tunggal? Ini mengurangi kode yang harus Anda tulis dan memberikan pemisahan yang lebih jelas antara klien dan 'permainan' yang akan meningkatkan kualitas kode Anda.
Sekarang bagaimana dengan berkomunikasi antara proses dan utas? Komunikasi lintas proses dapat dilakukan dalam banyak cara, (bernama-) pipa, memori bersama, COM, itu benar-benar tergantung pada teknologi yang Anda gunakan. Namun, jika Anda membuat server, Anda mungkin ingin menggunakan varian jaringan menggunakan soket dan semacam TCP, ini tentu saja di mana LIDGREN akan berguna.
Banyak dari teknik ini juga berlaku untuk komunikasi lintas thread. Tetapi ini bahkan lebih tergantung pada teknik yang Anda gunakan. Anda bisa lagi menggunakan TCP, tetapi mungkin sistem yang lebih sederhana adalah event dan beberapa marshalling, meskipun ini bisa membuat loop game Anda tidak deterministik (2).
Sumber
- Desain dan implementasi sistem operasi (buku MINIX), edisi ke-3 oleh Andrew S. Tanenbaum
- Perbaiki cap waktu Anda oleh Glenn Fiedler: http://gafferongames.com/game-physics/fix-your-timestep/