Cách tiếp cận phổ biến để tận dụng nhiều lõi là, thẳng thắn, chỉ đơn giản là sai lầm. Việc tách các hệ thống con của bạn thành các luồng khác nhau thực sự sẽ phân tách một số công việc trên nhiều lõi, nhưng nó có một số vấn đề lớn. Đầu tiên, rất khó để làm việc với. Ai muốn làm quen với các khóa và đồng bộ hóa và giao tiếp và các công cụ khi họ chỉ có thể viết thẳng lên kết xuất hoặc mã vật lý? Thứ hai, cách tiếp cận không thực sự mở rộng quy mô. Tốt nhất, điều này sẽ cho phép bạn tận dụng khoảng ba hoặc bốn lõi, và đó là nếu bạn thực sự biết bạn đang làm gì. Chỉ có rất nhiều hệ thống con trong một trò chơi, và trong số chúng thậm chí còn ít hơn chiếm nhiều thời gian CPU. Có một vài lựa chọn thay thế tốt mà tôi biết.
Một là có một luồng chính cùng với luồng công nhân cho mỗi CPU bổ sung. Bất kể hệ thống con, luồng chính ủy nhiệm các nhiệm vụ riêng biệt cho luồng xử lý công nhân thông qua một số loại hàng đợi; những nhiệm vụ này cũng có thể tự tạo ra các nhiệm vụ khác. Mục đích duy nhất của các luồng công nhân là mỗi nhiệm vụ lấy từ hàng đợi một lần và thực hiện chúng. Tuy nhiên, điều quan trọng nhất là ngay khi một luồng cần kết quả của một nhiệm vụ, nếu nhiệm vụ được hoàn thành, nó có thể nhận được kết quả và nếu không, nó có thể loại bỏ nhiệm vụ khỏi hàng đợi một cách an toàn và tiếp tục thực hiện điều đó nhiệm vụ chính nó. Đó là, không phải tất cả các nhiệm vụ cuối cùng sẽ được lên lịch song song với nhau. Có nhiều nhiệm vụ hơn có thể được thực hiện song song là tốtđiều trong trường hợp này; nó có nghĩa là nó có khả năng mở rộng khi bạn thêm nhiều lõi. Một nhược điểm của điều này là nó đòi hỏi rất nhiều công việc trước mắt để thiết kế một hàng đợi và vòng lặp công nhân đàng hoàng trừ khi bạn có quyền truy cập vào thư viện hoặc thời gian chạy ngôn ngữ đã cung cấp điều này cho bạn. Phần khó nhất là đảm bảo các nhiệm vụ của bạn thực sự tách biệt và an toàn cho luồng, và đảm bảo các nhiệm vụ của bạn ở trong một khu vực giữa hạnh phúc giữa hạt thô và hạt mịn.
Một cách khác để xử lý các luồng hệ thống con là song song hóa từng hệ thống con trong sự cô lập. Đó là, thay vì chạy kết xuất và vật lý trong các luồng của riêng họ, hãy viết hệ thống con vật lý để sử dụng tất cả các lõi của bạn cùng một lúc, hãy viết hệ thống con kết xuất để sử dụng tất cả các lõi của bạn cùng một lúc, sau đó hai hệ thống chỉ cần chạy tuần tự (hoặc xen kẽ, tùy thuộc vào các khía cạnh khác của kiến trúc trò chơi của bạn). Ví dụ, trong hệ thống con vật lý, bạn có thể lấy tất cả khối lượng điểm trong trò chơi, chia chúng ra giữa các lõi của bạn và sau đó có tất cả các lõi cập nhật chúng cùng một lúc. Mỗi lõi sau đó có thể làm việc trên dữ liệu của bạn trong các vòng lặp chặt chẽ với địa phương tốt. Kiểu song song bước khóa này tương tự như những gì GPU làm. Phần khó nhất ở đây là đảm bảo rằng bạn đang phân chia công việc của mình thành các phần nhỏ mịn để phân chia công bằngthực sự dẫn đến một lượng công việc như nhau trên tất cả các bộ xử lý.
Tuy nhiên, đôi khi nó chỉ đơn giản nhất, do chính trị, mã hiện có hoặc các tình huống bực bội khác, để cung cấp cho mỗi hệ thống con một luồng. Trong trường hợp đó, tốt nhất là tránh tạo ra nhiều luồng hệ điều hành hơn lõi cho khối lượng công việc nặng của CPU (nếu bạn có thời gian chạy với các luồng nhẹ chỉ xảy ra để cân bằng giữa các lõi của bạn, thì đây không phải là vấn đề lớn). Ngoài ra, tránh giao tiếp quá mức. Một mẹo hay là thử dùng pipelining; mỗi hệ thống con chính có thể hoạt động trên một trạng thái trò chơi khác nhau tại một thời điểm. Đường ống làm giảm lượng giao tiếp cần thiết giữa các hệ thống con của bạn vì chúng không cần truy cập vào cùng một dữ liệu cùng một lúc và nó cũng có thể vô hiệu hóa một số thiệt hại do tắc nghẽn. Ví dụ, nếu hệ thống con vật lý của bạn có xu hướng mất nhiều thời gian để hoàn thành và hệ thống con kết xuất của bạn luôn chờ đợi nó, tốc độ khung hình tuyệt đối của bạn có thể cao hơn nếu bạn chạy hệ thống con vật lý cho khung hình tiếp theo trong khi hệ thống con kết xuất vẫn hoạt động trên trước đó khung. Trong thực tế, nếu bạn có các tắc nghẽn như vậy và không thể loại bỏ chúng theo bất kỳ cách nào khác, đường ống có thể là lý do chính đáng nhất để bận tâm với các luồng hệ thống con.