Công cụ C ++ mà tôi đang làm việc hiện đang được chia thành nhiều luồng lớn - Tạo (để tạo nội dung thủ tục của tôi), Trò chơi (cho AI, kịch bản, mô phỏng), Vật lý và Kết xuất.
Các luồng giao tiếp với nhau thông qua các đối tượng tin nhắn nhỏ, truyền từ luồng này sang luồng khác. Trước khi bước, một luồng xử lý tất cả các thông báo đến của nó - cập nhật để biến đổi, thêm và xóa các đối tượng, v.v. Đôi khi, một luồng (Tạo) sẽ tạo ra một thứ gì đó (Nghệ thuật) và chuyển nó sang một luồng khác (Kết xuất) để sở hữu vĩnh viễn.
Đầu quá trình và tôi đã nhận thấy một vài điều:
Hệ thống nhắn tin cồng kềnh. Tạo một loại thông báo mới có nghĩa là phân lớp lớp Thông báo cơ sở, tạo một enum mới cho loại của nó và viết logic cho cách các chủ đề sẽ diễn giải loại tin nhắn mới. Đó là một cú hích tốc độ để phát triển và dễ bị lỗi kiểu chữ. (Sidenote- làm việc về điều này khiến tôi đánh giá cao những ngôn ngữ năng động tuyệt vời như thế nào!)
Có cách nào tốt hơn để làm điều này? Tôi có nên sử dụng một cái gì đó như boost :: bind để thực hiện điều này tự động không? Tôi lo lắng rằng nếu tôi làm điều đó tôi sẽ mất khả năng nói, sắp xếp các tin nhắn dựa trên loại hoặc một cái gì đó. Không chắc chắn nếu loại quản lý đó thậm chí sẽ trở nên cần thiết.
Điểm đầu tiên rất quan trọng vì các chủ đề này giao tiếp rất nhiều. Tạo và gửi tin nhắn là một phần lớn trong việc làm cho mọi thứ xảy ra. Tôi muốn hợp lý hóa hệ thống đó, nhưng cũng mở ra cho các mô hình khác có thể hữu ích như vậy. Có những thiết kế đa luồng khác nhau mà tôi nên nghĩ đến để giúp làm điều này dễ dàng hơn không?
Ví dụ, có một số tài nguyên được viết không thường xuyên, nhưng thường xuyên được đọc từ nhiều luồng. Tôi có nên cởi mở với ý tưởng có dữ liệu chia sẻ, được bảo vệ bởi các mutexes, rằng tất cả các luồng có thể truy cập không?
Đây là lần đầu tiên tôi thiết kế một cái gì đó với ý tưởng đa luồng từ đầu. Ở giai đoạn đầu này, tôi thực sự nghĩ rằng nó sẽ thực sự tốt (xem xét) nhưng tôi lo lắng về việc mở rộng quy mô và hiệu quả của chính tôi trong việc thực hiện các công cụ mới.