Bạn cần phải suy nghĩ, lợi ích thực tế của chủ đề là gì? Hãy nhớ rằng trên một máy tính cốt lõi, các chủ đề không thực sự cho phép thực hiện đồng thời, chỉ là ấn tượng của nó. Đằng sau hậu trường, CPU là bối cảnh chuyển đổi giữa các chủ đề khác nhau, làm một công việc nhỏ trên mỗi lần. Vì vậy, nếu tôi có một số nhiệm vụ liên quan đến việc không chờ đợi, chạy chúng đồng thời (trên một lõi đơn) sẽ không nhanh hơn chạy chúng tuyến tính. Trong thực tế, nó sẽ chậm hơn, do chi phí bổ sung của chuyển đổi ngữ cảnh thường xuyên.
Nếu đúng như vậy thì tại sao lại sử dụng đề tài trên một máy tính lõi đơn? Đầu tiên, vì đôi khi các tác vụ có thể kéo dài trong một thời gian chờ đợi trên một số tài nguyên bên ngoài, chẳng hạn như đĩa hoặc thiết bị phần cứng khác, để có sẵn. Trong khi nhiệm vụ trong một giai đoạn chờ đợi, luồng cho phép các tác vụ khác tiếp tục, do đó sử dụng thời gian của CPU hiệu quả hơn.
Thứ hai, nhiệm vụ có thể có thời hạn của một số loại để hoàn thành, đặc biệt nếu họ đang phản hồi sự kiện. Ví dụ cổ điển là giao diện người dùng của ứng dụng. Máy tính phải trả lời các sự kiện hành động của người dùng càng nhanh càng tốt, ngay cả khi nó đang bận thực hiện một số tác vụ chạy dài khác, nếu không người dùng sẽ bị kích động và có thể tin rằng ứng dụng đã gặp sự cố. Luồng cho phép điều này xảy ra.
Đối với trò chơi, tôi không phải là lập trình viên trò chơi, nhưng sự hiểu biết của tôi về tình hình là: trò chơi 3D tạo mô hình lập trình của thế giới trò chơi; người chơi, kẻ thù, vật phẩm, địa hình, vv Thế giới trò chơi này được cập nhật theo các bước rời rạc, dựa trên lượng thời gian đã trôi qua kể từ lần cập nhật trước. Vì vậy, nếu 1ms đã trôi qua kể từ lần cuối vòng lặp trò chơi, vị trí của đối tượng được cập nhật bằng cách sử dụng vận tốc của nó và thời gian trôi qua để xác định delta (rõ ràng là vật lý phức tạp hơn một chút, nhưng bạn có được ý kiến). Các yếu tố khác như AI và khóa đầu vào cũng có thể đóng góp vào bản cập nhật. Khi mọi thứ đã kết thúc, thế giới trò chơi được cập nhật được hiển thị dưới dạng khung mới và quá trình bắt đầu lại. Quá trình này thường xảy ra nhiều lần trong một giây.
Khi chúng ta nghĩ về vòng lặp trò chơi theo cách này, chúng ta có thể thấy rằng động cơ trên thực tế đạt được một mục tiêu rất giống với mục tiêu của luồng. Nó có một số nhiệm vụ chạy dài (cập nhật vật lý của thế giới, xử lý đầu vào của người dùng, vv), và nó cho thấy rằng chúng đang xảy ra đồng thời bằng cách chia nhỏ chúng thành những phần nhỏ và xen kẽ những phần này, nhưng thay vì dựa vào CPU hoặc hệ điều hành để quản lý thời gian dành cho mỗi CPU, chính nó đang thực hiện nó. Điều này có nghĩa là nó có thể giữ tất cả các tác vụ khác nhau được đồng bộ hóa một cách chính xác và tránh những phức tạp đi kèm với luồng thực: khóa, tiền giả, mã tái nhập, v.v. Không có ý nghĩa về hiệu suất cho phương pháp này, bởi vì như chúng ta đã nói máy lõi đơn chỉ có thể thực sự thực thi mã tuyến tính.
Mọi thứ thay đổi khi có hệ thống đa lõi. Giờ đây, các tác vụ có thể chạy đồng thời và thực sự có lợi ích khi sử dụng luồng để xử lý các phần khác nhau của bản cập nhật thế giới trò chơi, miễn là chúng tôi có thể quản lý đồng bộ hóa kết quả để hiển thị các khung nhất quán. Do đó, chúng tôi hy vọng rằng, với sự ra đời của các hệ thống đa lõi, các nhà phát triển công cụ trò chơi sẽ làm việc về điều này. Và hóa ra là vậy. Valve, các nhà sản xuất của Half Life, gần đây đã giới thiệu hỗ trợ đa bộ xử lý vào Công cụ Nguồn của họ, và tôi tưởng tượng nhiều nhà phát triển động cơ khác đang theo dõi.
Vâng, điều đó hóa ra lâu hơn một chút so với dự kiến của tôi. Tôi không phải là chuyên gia về luồng hoặc trò chơi, nhưng tôi hy vọng tôi đã không tạo ra bất kỳ lỗi nào đặc biệt rõ ràng.Nếu tôi chắc chắn mọi người sẽ sửa tôi :)
Tính song song rất khó. Không chỉ "wow, đây là khó khăn" -hard nhưng "về mặt lý thuyết, rất nhiều vấn đề không phải là song song" -hard. –