在用GHC编译的Haskell程序中,是否有可能以编程方式防止过多的内存使用?也就是说,让它在内存使用量达到指定限制时通知程序,最好指示有问题的线程。
例如,假设我想编写一个服务器,托管脚本语言解释器,用户可以连接到该服务器。这是Turing-complete,所以程序理论上可以使用无限的内存或时间。假设每个客户端都使用单独的线程进行处理。如果客户端写入一个非常快速消耗内存的无限循环,我想确保该线程在被异常警告之前消耗的内存不超过1 MB。发生这种情况时,我不希望其他用户受到影响。
这可能是使用单独的流程和ulimit
,但是:
我宁愿将其保留在一个程序中,以避免进程间通信的复杂性。
我需要支持Linux和Windows,所以如果可能的话,我宁愿保持与平台无关。
答案 0 :(得分:3)
Edward Z. Yang和DavidMazières开发了GHC扩展,支持动态资源限制,并在http://ezyang.com/rlimits.html进行讨论。他们还提供支持此版本的GHC 7.8版本。
不幸的是,他们的工作没有被纳入GHC上游。
答案 1 :(得分:2)
可能不是你想要的。但是,正如文档here所示,您有一个ghc编译选项:
-Ksize ,更新:哎呀,对不起,-K是堆栈溢出。不过,您可以查看该链接。
答案 2 :(得分:2)
在您的示例中,您可能需要修改脚本语言解释器的来源,对内存管理进行一些修改。模块,当然,如果它有一些托管内存分配功能,解释器可以通过API回调到主机应用程序来抱怨内存配额的过度使用。