我已经多次阅读过有关Haskell的惰性求值可能会导致空间泄漏的内容。什么样的代码会导致空间泄漏?如何检测它们?程序员可以采取哪些预防措施来避免它们?
我已经多次阅读过有关Haskell的惰性求值可能会导致空间泄漏的内容。什么样的代码会导致空间泄漏?如何检测它们?程序员可以采取哪些预防措施来避免它们?
你可能会得到很多答案,这是我在尝试进行一些“实际应用程序”时遇到的问题之一。我正在使用多线程和一些MVar来传递数据(MVar类似于锁定的共享内存)。我的典型模式是:
a <- takeMVar mvar
putMVar mvar (a + 1)
然后,有时候,当发生适当的条件时,我会做如下操作:
a <- takeMVar mvar
when (a > 10) ....
问题在于mvar的内容本质上是(0 + 1 + 1 + 1 + ....),对于像100k这样的数字来说,这是相当密集的...这种类型的问题在我的代码中相当普遍;不幸的是,对于多线程应用程序来说,很容易陷入这样的问题。