我目前正在使用的C ++引擎分为几个大线程-生成(用于创建程序内容),游戏性(用于AI,脚本,模拟),物理和渲染。
线程之间通过小消息对象相互通信,这些消息对象在线程之间传递。在执行步进操作之前,一个线程会处理其所有传入消息-更新以进行转换,添加和删除对象等。有时,一个线程(Generation)会创建某种东西(Art)并将其传递给另一个线程(Rendering)以实现永久所有权。
在此过程的早期,我注意到了两点:
消息传递系统很麻烦。创建新的消息类型意味着要对基础Message类进行子类化,为其类型创建一个新的枚举,并编写有关线程应如何解释新消息类型的逻辑。这是开发的重灾区,并且容易出现拼写错误。(Sidenote-从事此工作使我很欣赏动态语言的出色表现!)
有一个更好的方法吗?我是否应该使用boost :: bind之类的工具使之自动运行?我担心如果这样做,我会失去说话的能力,无法根据类型对消息进行排序。不确定是否需要这种管理。
第一点很重要,因为这些线程进行了大量通信。创建和传递消息是使事情发生的重要部分。我想简化该系统,但也欢迎其他可能同样有用的范例。我应该考虑使用其他不同的多线程设计来简化此过程吗?
例如,有些资源很少被写入,但是经常从多个线程中读取。我是否应该对所有线程都可以访问的共享数据(受互斥锁保护)持开放态度?
这是我第一次从头开始考虑多线程设计。在这个早期阶段,我实际上认为进展非常顺利(正在考虑),但我担心扩展以及实现新内容的效率问题。