我正在研究一个旨在作为服务工作的研究编译器项目.其中一个要求是某些用户在处理其调用时可能具有有限的内存使用量(例如,"来自IP abcd的调用可能使用高达30mb的堆内存").
我用C语言编写的原型实现只是直接使用内存池malloc(实际上由于有效类型而很难实现).但是,手动内存管理.
有没有办法在Haskell中实现这一点,通过限制函数,monad或轻量级线程上的堆使用?(我接受其他功能语言的建议,这些建议可能允许我这样做.)
我想知道,是否可以限制线程使用的内存量?我正在寻找运行服务器,其中提交并运行不受信任的用户代码.我可以使用SafeHaskell来确保它不执行任何未经授权的IO,但我需要确保用户的代码不会使整个服务器崩溃,即通过导致堆栈溢出或内存不足堆错误.
有没有办法限制每个单独线程可以访问的内存量,或者某种方式确保如果一个线程占用大量内存,那么只有该线程被终止?
也许有一种方法,当任何线程遇到内存不足错误时,我可以捕获异常并选择哪个线程死掉?
我更多地谈论并发性,在forkIO和STM线程的意义上,而不是par和seq的并行性.
注意:这与这个问题非常相似,但它从未得到一般问题的答案,而是答案涉及问题的具体情景.此外,自2011年以来,有可能在GHC 7.8中有所改变,可能是新的IO经理?