Haskell软实时的当前状态

rlk*_*024 30 garbage-collection haskell real-time

我正在考虑Haskell的软实时应用程序.我可能会使用演员,这是值得的.我想知道是否有人了解Haskell的当前实时状态.具体来说,GC暂停应用程序的问题.我已经广泛搜索过,而且我在2年多前发现了大量的讨论,但没有任何最新内容.以下是我发现的几个参考文献:

将Haskell用于大型实时系统:如何(如果?)?

Haskell的GC性能如何用于游戏等软实时应用程序?

我读过的很多旧东西都表明情况(当时)被认为正在改善.有吗?

甚至2年多以前,也有一些评论表明可以调整Haskell应用程序以可靠地将GC暂停降低到一毫秒或两秒.这看起来真实吗?

Don*_*art 31

因此,对"实时"的关注是GC集合引入的延迟.

GHC使用多核垃圾收集器(并且有一个带有每线程本地堆的分支).最初开发是为了通过降低频繁的世界同步的成本来提高多核性能(每个核心可以独立收集),出于同样的原因,这也有利于软实时.然而,由于2013年,每线程本地堆还没有被合并到主GHC,虽然并行GC已.

对于游戏,您应该能够通过使用线程来利用它,从而减少对世界本地收藏的需求.

对于长寿命对象,在全局堆中,您仍会冒一些(ms)GC风险.但是,使用例如ThreadScope仔细分析将消除此处的障碍.我已经看到通过GHC管理的网络堆栈流式传输实时1080p视频而没有明显的GC暂停.

即使没有这些调整,事情"可能只是起作用".Frag几乎不需要优化,而且近10年前现在是软实时.

最后,有许多工具和GHC标志可以提高性能:

然后是编码:使用未装箱的类型(无GC),最小化惰性结构分配.以包装形式保存长寿数据.测试和基准.

我觉得你会好的.

  • 谢谢你提醒我重新审视这个.根据GHC状态报告,每线程GC保留在分支中,并且不在主线中.我已经链接到报告和状态. (2认同)

Ale*_*leš 7

你见过这些:

此外,我建议联系多核垃圾收集的作者与本地堆文件(ISMM 2011).