Về cơ bản, đây là một quá trình so với câu hỏi luồng, cả hai đều không quá khác nhau, đôi khi các luồng được gọi là các tiến trình nhẹ. Sự khác biệt lớn nhất là một quy trình riêng biệt có không gian địa chỉ riêng nhưng có những khác biệt khác (1):
Mỗi quá trình
- Không gian địa chỉ
- Biến toàn cầu
- Mở tập tin
- Quá trình con
- Đang chờ báo động, ngắt và xử lý tín hiệu
Mỗi chủ đề
- Chương trình truy cập
- Đăng ký
- Cây rơm
- Tiểu bang
Dựa trên những khác biệt này, có thể có ích khi có một luồng máy chủ và máy khách trong cùng một quy trình để bạn có thể chia sẻ xử lý tệp và các biến toàn cục. Đây sẽ là một đối số cho phương pháp 'trong cùng một quy trình', một đối số (nhỏ) khác là bạn chỉ nhận được một cửa sổ bật lên 'Tường lửa Windows' cho mỗi quy trình. Một lập luận cho cách tiếp cận 'quy trình khác nhau' là một người có thể chạy nhiều máy chủ mà không phải chạy nhiều máy khách. Điều này sẽ là lý tưởng cho một máy chủ chuyên dụng như thiết lập và là một cách tiếp cận chúng ta thường thấy trong các game bắn súng góc nhìn thứ nhất.
Bây giờ đối với ý tưởng có một quy trình máy chủ hoặc luồng ngay cả khi chơi ngoại tuyến (và thậm chí cho cả người chơi đơn), đây là một ý tưởng tuyệt vời được sử dụng rất nhiều trong thực tế. Bạn có thể nói rất nhiều trò chơi làm điều này bằng cách nhìn vào màn hình đang tải, những gợi ý nhỏ như 'nhận' sẽ cho nó đi. Thật hợp lý khi làm điều này vì nếu bạn định tạo nhiều người chơi, hầu hết các quy tắc trò chơi sẽ bị chi phối bởi máy chủ, vậy tại sao bạn không điều chỉnh chúng cho người chơi đơn? Điều này làm giảm mã bạn phải viết và phân tách rõ ràng hơn giữa máy khách và 'trò chơi' sẽ cải thiện chất lượng mã của bạn.
Bây giờ làm thế nào về giao tiếp giữa các quá trình và chủ đề? Giao tiếp quá trình chéo có thể được thực hiện bằng nhiều cách, (tên-), bộ nhớ dùng chung, COM, nó thực sự phụ thuộc vào công nghệ bạn đang sử dụng. Tuy nhiên, nếu bạn đang tạo một máy chủ, có lẽ bạn sẽ muốn sử dụng một biến thể kết nối mạng bằng cách sử dụng các ổ cắm và một cái gì đó tương tự như TCP, đây là điều tất nhiên khi LIDGREN sẽ có ích.
Rất nhiều trong số các kỹ thuật này cũng có giá trị cho giao tiếp xuyên chuỗi. Nhưng điều này phụ thuộc nhiều hơn vào các kỹ thuật bạn đang sử dụng. Bạn có thể một lần nữa đi với TCP, nhưng có lẽ một hệ thống thậm chí đơn giản hơn sẽ là các sự kiện và một số sự sắp xếp, mặc dù điều này có thể làm cho vòng lặp trò chơi của bạn không mang tính quyết định (2).
Nguồn
- Thiết kế và triển khai hệ điều hành (sách MINIX), ấn bản thứ 3 của Andrew S. Tanenbaum
- Khắc phục dấu thời gian của bạn bằng Glenn Fiedler: http://gafferongames.com/game-physics/fix-your-timestep/