我挑战自己设计和实现(在Java中,但仍然在设计级别)事件总线,用于多线程。未来计划不会严肃使用这个系统,唯一的兴趣在于挑战本身及其优化。
事件总线的设计是为了在事件触发和与其接收相关的代码之间进行异步执行。但是,通过控制事件总线的线程(EventManager),我看到了两种可能的实现方式。
我的问题是:如果这两个实施最好的那一个?
1) EventManager线程调用订阅该事件的每个系统并以顺序方式运行其代码。 虽然这种解决方案在考虑发射器 - 受体时确实是异步的,但在执行多个受体时我们仍然具有同步性。此外,如果其中一个接收器功能需要时间,我们就会延迟整个总线管理的执行。
2)每个受体系统都有自己的缓冲总线,EventManager线程只将事件重新传输到订阅系统,乘以使用的内存(事件可以同时在多个系统中重写) )但解决同步问题。
我想在一个典型的系统(即游戏,非计算重型软件或时间关键型解决方案)中,第一个是最好的。第二个可能需要大量的内存,而不是那么多的时间优化。
你之前有过这个问题吗?你有什么提示吗?
答案 0 :(得分:0)
在两者之间,您需要选择您的设计要求。
对于选项1:
优点:
缺点:
对于选项2:
优点:
<强>缺点:强>
如果有的话,我个人会选择#2选项来支持性能,因为通常内存会受到性能提升的副作用。但是,如果您的目标受众不开发多线程客户端或同步很难实施,我会选择优先选项#1,安全性和可靠性。