Haskell软实时系统的现状
我正在考虑Haskell的软实时应用程序。我可能会使用演员,因为这是值得的。我想知道是否有人了解Haskell的实时状态。特别是GC暂停应用程序时出现的问题。我在谷歌上搜索了很多内容,发现了2年多前的大量讨论,但都不是最新的。以下是我找到的一些参考资料: 我读过的许多旧资料表明,(当时)情况被认为正在改善。是吗 甚至在2年多以前,也有一些评论建议可以对Haskell应用程序进行调优,以可靠地将GC暂停时间降低到一两毫秒。这看起来现实吗?你看过这些吗:Haskell软实时系统的现状,haskell,garbage-collection,real-time,Haskell,Garbage Collection,Real Time,我正在考虑Haskell的软实时应用程序。我可能会使用演员,因为这是值得的。我想知道是否有人了解Haskell的实时状态。特别是GC暂停应用程序时出现的问题。我在谷歌上搜索了很多内容,发现了2年多前的大量讨论,但都不是最新的。以下是我找到的一些参考资料: 我读过的许多旧资料表明,(当时)情况被认为正在改善。是吗 甚至在2年多以前,也有一些评论建议可以对Haskell应用程序进行调优,以可靠地将GC暂停时间降低到一两毫秒。这看起来现实吗?你看过这些吗: 还有,看看 另外,我建议与论文作者
- 还有,看看
- -获取最佳GC标志的图形分解
- -(-Isecons)的选项可能很有用
我想你会没事的。我没有遇到GC暂停的问题,只要你不在所有事情上都使用惰性列表,就不应该生成太多垃圾
然而,对于多线程应用程序来说,天空并不那么明亮。GHC仍然没有一个具有线程优先级的调度器,如果您使用线程进行繁重的后台处理,您可以很容易地耗尽事件循环。GHC 8.2.1有一个名为Compact Regions的功能,这可能会有所帮助 据我理解,这似乎是一种半手动内存管理。 您可以将长寿命数据存储在压缩区域中,而垃圾收集器不会跟踪它。如果在压缩区域中有任何引用,则整个压缩区域将保持活动状态。一旦该区域中没有任何引用,它将被解除分配。如果对某个区域的内容进行功能更新,则可以在新区域中重新分配该区域,旧区域将被释放
我还没有看到GC暂停效果,例如xmonad或frag。分析工具很容易就足以确保您不会产生大量垃圾。不过,我对Haskell中的参与者有点担心,GHC线程的研究要好得多。我认为这个问题很难凭经验回答,但作为一个数据,我经常在相当标准的商品硬件上的软实时应用程序中看到亚毫秒gc暂停。我不熟悉GHC的stricness analysis()。我的理解是,在许多情况下,它会自动地严格限制事物,包括列表。(假设优化级别设置得足够高。)那么你是说我应该确保以这样一种方式进行编码,GHC可以在适当的情况下使事情变得严格?Don在哪个GHC版本中引入了每线程堆?GHC文档中是否有任何详细信息?(我尝试过谷歌搜索,但没有发现任何特别的东西)谢谢你提醒我再次访问这个网站。根据GHC状态报告,每线程GC保留在分支中,而不在主线中。我已经链接到报告和状态。