rlk*_*024 30 garbage-collection haskell real-time
我正在考虑Haskell的软实时应用程序.我可能会使用演员,这是值得的.我想知道是否有人了解Haskell的当前实时状态.具体来说,GC暂停应用程序的问题.我已经广泛搜索过,而且我在2年多前发现了大量的讨论,但没有任何最新内容.以下是我发现的几个参考文献:
我读过的很多旧东西都表明情况(当时)被认为正在改善.有吗?
甚至2年多以前,也有一些评论表明可以调整Haskell应用程序以可靠地将GC暂停降低到一毫秒或两秒.这看起来真实吗?
Don*_*art 31
因此,对"实时"的关注是GC集合引入的延迟.
GHC使用多核垃圾收集器(并且有一个带有每线程本地堆的分支).最初开发是为了通过降低频繁的世界同步的成本来提高多核性能(每个核心可以独立收集),出于同样的原因,这也有利于软实时.然而,由于2013年,每线程本地堆还没有被合并到主GHC,虽然并行GC已.
对于游戏,您应该能够通过使用线程来利用它,从而减少对世界本地收藏的需求.
对于长寿命对象,在全局堆中,您仍会冒一些(ms)GC风险.但是,使用例如ThreadScope仔细分析将消除此处的障碍.我已经看到通过GHC管理的网络堆栈流式传输实时1080p视频而没有明显的GC暂停.
即使没有这些调整,事情"可能只是起作用".Frag几乎不需要优化,而且近10年前现在是软实时.
最后,有许多工具和GHC标志可以提高性能:
然后是编码:使用未装箱的类型(无GC),最小化惰性结构分配.以包装形式保存长寿数据.测试和基准.
我觉得你会好的.