Haskell中的有界计算

时间:2012-05-27 06:54:42

标签: haskell ghc

Haskell中是否有任何方法(对于需要在Linux和Windows上运行的代码,使用GHC来执行有界计算)?也就是说,“如果可行的话,计算此函数的结果,但如果尝试使用了超过X个CPU周期,Y堆栈空间或Z堆空间,但仍未完成,请停止并返回指示无法完成计算“?

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:6)

这是可能尝试的hackish解决方案:使用forkIO生成计算,并让父线程(或可以访问分叉线程的ThreadId的监视线程)定期轮询您想要的任何数量,并在必要时向计算线程抛出异步异常(有趣的是,这正是timeout的工作原理。)

接下来的问题是,是否有办法找出Haskell中当前堆的大小。您可以通过生成shell命令或以其他方式查询操作系统来查找总内存消耗和周期(我不知道如何在Windows上执行此操作。)

这不是一个完美的解决方案,但它很简单,你可以在几分钟内实现和测试。

答案 2 :(得分:6)

在每个进程级别,您可以使用GHC's RTS options来控制最大堆栈和堆大小。