LMAX 中断器 - 维护事件的顺序



>我有一个从各种文件加载时间序列数据的应用程序。应用程序为每个文件打开一个线程以并行加载数据。文件中的记录是有序的,但我需要向应用程序的其余部分提供一个提要,以保持事件的整体顺序。

这是否可以像多个生产者一样使用中断器来实现,一种消费者类型的设计来维护事件的顺序?

目前正在使用阻塞集合和排序列表对每个阻塞集合的头部进行排序,但这会消耗大量内存,我有兴趣看看其他人是否使用不同的架构实现了类似的设计。

谢谢

如果您重新设计为对象流之类的内容(专注于流(,那么从文件加载应该只加载内存中的最小值(您需要的缓冲区大小(。每个流预取 1 个头项。

然后,您必须实现 k 方式合并以选取 N 项中最低的项。您可以将流放在二叉树中。弹出最低值时,流将在树中重新定位(交换和旋转(。当然,它大约在 O(log n( 附近,弹出一个值。当溪流干涸时,从树上移开。

它是 2 个排序数组

合并的概括;你必须按数组的头部重新排序,这与对随机集合进行排序完全不同;你有一个几乎有序的集合,除了 1 个流不合适。您可以进行二叉搜索,但重新插入在 mem 副本中会很昂贵。树木旋转更简单。

(破坏者与此无关...哈哈(

最新更新