何时使用 OSGi EventAdmin,何时不使用?

Posted

技术标签:

【中文标题】何时使用 OSGi EventAdmin,何时不使用?【英文标题】:When to use OSGi EventAdmin and when not? 【发布时间】:2011-10-24 12:41:34 【问题描述】:

我有一个关于 OSGi EventAdmin 服务使用的一般性问题。我目前在每秒可能产生数千个事件的环境中使用它。我担心 EventAdmin 服务可能是一个瓶颈。我从探查器获得的初步结果似乎支持这一点。我的问题是:

    是否有使用 EventAdmin 服务的一般经验法则? sendEvent 和 postEvent 方法在性能方面有何不同? 是否存在已知具有低性能 EventAdmin 实现的特定 OSGi 容器?

提前感谢您的支持!

干杯, 乔治

【问题讨论】:

【参考方案1】:

你有更多关于你看到的瓶颈的信息吗?

我们即将更新 Event Admin 规范(请参阅 [1] 中的 RFC 157)以解决一些性能问题。但这还没有完成规范工作。

Send 事件是同步发送,因此调用线程会阻​​塞,直到通知所有侦听器。大多数实现都使用调用者线程。发布事件不会阻止调用者。它将工作排队等待另一个线程传递事件。当前的事件管理规范要求对异步事件进行排序,因此如果不需要排序,这可能会导致延迟。 RFC 157 提供了不需要这种排序的能力。

我没有关于一种实施之前是比另一种更好还是更差的数据。

[1]http://www.osgi.org/Download/File?url=/download/osgi-4.3-early-draft2.pdf

【讨论】:

我现在已经在 Felix 和 Equinox OSGi 容器中测试了我们的代码。据我所知,Felix 在事件处理方面似乎比 Equinox 更高效。它的内存效率也远高于 Equinox。我想我会暂时坚持使用 Felix。

以上是关于何时使用 OSGi EventAdmin,何时不使用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Eclipse EventAdmin 发布和订阅 dBus 事件?

何时使用类别以及何时使用子类化? [关闭]

MySQL索引的分类何时使用何时不使用何时失效?

何时使用,何时不使用 Try Catch Final

何时使用 Storyboard 以及何时使用 XIB

何时使用 GetXXX() 方法以及何时使用 Getter 属性