Multithreading 限制GHC中每个线程的线程内存访问
我想知道,是否有可能限制线程使用的内存量?我正在考虑运行一个提交并运行不受信任的用户代码的服务器。我可以使用SafeHaskell来确保它不会执行任何未经授权的IO,但我需要确保用户的代码不会导致整个服务器崩溃,即导致堆栈溢出或内存不足堆错误 是否有办法限制每个线程可以访问的内存量,或者有办法确保如果一个线程占用大量内存,则只有该线程被终止 也许,有没有一种方法,当任何线程遇到内存不足错误时,我可以捕获异常并选择哪个线程死亡Multithreading 限制GHC中每个线程的线程内存访问,multithreading,haskell,memory-management,concurrency,ghc,Multithreading,Haskell,Memory Management,Concurrency,Ghc,我想知道,是否有可能限制线程使用的内存量?我正在考虑运行一个提交并运行不受信任的用户代码的服务器。我可以使用SafeHaskell来确保它不会执行任何未经授权的IO,但我需要确保用户的代码不会导致整个服务器崩溃,即导致堆栈溢出或内存不足堆错误 是否有办法限制每个线程可以访问的内存量,或者有办法确保如果一个线程占用大量内存,则只有该线程被终止 也许,有没有一种方法,当任何线程遇到内存不足错误时,我可以捕获异常并选择哪个线程死亡 我在FrkIO和STM线程的意义上更多地讨论并发性,而不是PAR和SE
我在FrkIO和STM线程的意义上更多地讨论并发性,而不是PAR和SEQ的Palalelistic。< /P>
注意:这与非常相似,但它从未收到一般问题的答案,而是针对问题的特定场景的答案。此外,自2011年以来,GHC 7.8可能发生了一些变化,可能是因为新的IO管理器?我不知道Haskell,但一般来说,您的问题的答案是否定的。在我所知道的所有编程语言/运行时/操作系统等中,线程不过是通过同一代码的不同执行路径。在这种情况下,重要的是线程总是共享相同的虚拟地址空间 也就是说,没有任何技术原因可以解释为什么特定语言和运行时系统中的内存分配器不能使用特定于线程的变量来跟踪任何给定线程分配了多少内存,并施加任意限制
没有技术上的原因说明它不能这样做,但是如果线程A分配了一个对象,该对象随后被线程B、线程C、线程D访问,。。。那么惩罚线程A分配了它又有什么意义呢?在一般情况下,没有实用的方法来跟踪由多个线程访问的对象的“所有权”,这就是为什么我所知道的语言/运行时/操作系统/等等都没有尝试这样做的原因。是的,自2011年以来,在这方面取得了进展。看见空间限制有望在未来的GHC版本(可能是7.10版)中提供。你知道在此期间是否有任何类型的实验版本可以使用吗?在我链接的页面上有关于如何获取和编译GHC分支的说明。啊,我现在看到了,谢谢!你可以旋转一下。我不认为它会强制堆栈限制,但我确实相信堆大小是可以控制的。