Tôi đang cố gắng thực hiện một vòng lặp trò chơi đa luồng. Tôi đã làm điều đó nhưng phải sử dụng một vài khóa cho điều đó, làm hỏng hiệu suất. Sau khi nghiên cứu một chút tôi đã nảy ra ý tưởng này:
Thay vì chia các hệ thống con động cơ thành các luồng khác nhau (ví dụ: vật lý, hoạt hình), tất cả các hệ thống con đều chạy trên tất cả các luồng. Vì vậy, khi chúng tôi có bốn CPU, bốn luồng được tạo, với mỗi luồng có một vòng lặp cho tất cả các hệ thống con. Vì vậy, vòng lặp trò chơi lõi đơn được sao chép trên cả bốn luồng. Các vòng lặp trò chơi này được điều khiển bởi một vòng lặp khác, sẽ gửi tin nhắn (hoặc 'công việc', 'nhiệm vụ') đến một trong các chuỗi này (tùy thuộc vào cách sử dụng của chúng) theo đầu vào của người dùng hoặc tập lệnh. Điều này có thể được thực hiện với bộ đệm lệnh đệm đôi.
Chỉ vòng lặp kết xuất là một mình trong một luồng cho hiệu suất kết xuất tối đa. Bây giờ tôi đang nghĩ về cách tốt nhất để giao tiếp với vòng lặp kết xuất. Ý tưởng tốt nhất tôi có thể đưa ra là một lần nữa sử dụng bộ đệm lệnh và trao đổi nó khi vòng lặp kết xuất hoàn tất. Theo cách đó, vòng lặp kết xuất không phải đợi bất kỳ vòng lặp nào và có thể tiếp tục kết xuất. Nếu vòng lặp trò chơi chưa kết thúc khi vòng lặp kết xuất hoán đổi bộ đệm, tất cả các lệnh sau đó sẽ được thực hiện trong khung tiếp theo của vòng lặp kết xuất. Để đảm bảo rằng tất cả các đối tượng sẽ được vẽ ngay cả khi vòng lặp trò chơi chưa kết thúc, vòng lặp kết xuất giữ tất cả các đối tượng sẽ được vẽ và vẽ chúng cho đến khi nhận được lệnh dừng vẽ chúng.
Mục tiêu của tôi là làm cho động cơ có thể mở rộng theo số cpu và làm cho nó sử dụng tất cả các lõi. Đây có phải là một cách để làm điều đó? Cách tiếp cận tốt nhất cho việc này là gì và động cơ hiện đại xử lý việc này như thế nào?