【发布时间】:2016-06-26 17:03:16
【问题描述】:
我挑战自己设计和实现(在 Java 中,但仍处于设计级别)用于多线程的事件总线。未来没有计划认真使用该系统,唯一感兴趣的是挑战本身及其优化。
事件总线的设计目的是在事件触发和与其接收相关联的代码之间进行异步执行。但是,通过一个线程(EventManager)控制事件总线,我看到了两种可能的实现。
我的问题是:如果这两种实现方式哪个最好?
1) EventManager 线程调用每个订阅该事件的系统并按顺序运行其代码。 尽管在考虑发射器 - 受体时这种解决方案确实是异步的,但我们在多个受体的执行过程中仍然具有同步性。此外,如果其中一个受体功能需要时间,我们会延迟整个总线管理的执行。
2) 每个receiver系统都有自己的buffer bus,EventManager线程只把event重传给订阅的系统,成倍的使用内存(event可能同时在多个系统重写) 但解决了同步问题。
我猜在一个典型的系统(即游戏、非计算密集型软件或时间关键解决方案)中,第一个是最好的。第二个可能会占用大量内存来优化时间。
你以前有过这个问题吗?你有什么建议吗?
【问题讨论】:
标签: multithreading performance memory optimization