jmi*_*ite 6 concurrency multithreading haskell memory-management ghc
我想知道,是否可以限制线程使用的内存量?我正在寻找运行服务器,其中提交并运行不受信任的用户代码.我可以使用SafeHaskell来确保它不执行任何未经授权的IO,但我需要确保用户的代码不会使整个服务器崩溃,即通过导致堆栈溢出或内存不足堆错误.
有没有办法限制每个单独线程可以访问的内存量,或者某种方式确保如果一个线程占用大量内存,那么只有该线程被终止?
也许有一种方法,当任何线程遇到内存不足错误时,我可以捕获异常并选择哪个线程死掉?
我更多地谈论并发性,在forkIO和STM线程的意义上,而不是par和seq的并行性.
注意:这与这个问题非常相似,但它从未得到一般问题的答案,而是答案涉及问题的具体情景.此外,自2011年以来,有可能在GHC 7.8中有所改变,可能是新的IO经理?
我不了解 Haskell,但总的来说,你的问题的答案是否定的。在所有编程语言/运行时/操作系统/等中。据我所知,线程只不过是通过相同代码执行的不同路径。在这种情况下,重要的是线程始终共享相同的虚拟地址空间。
话虽如此,没有技术原因说明特定语言和运行时系统中的内存分配器无法使用特定于线程的变量来跟踪任何给定线程已分配的内存量,并施加任意限制。
没有技术原因说明为什么它不能这样做,但是如果线程 A 分配了一个对象,该对象随后被线程 B、线程 C、线程 D 访问......那么惩罚线程 A 分配它有什么意义呢?在一般情况下,没有实际的方法来跟踪由许多线程访问的对象的“所有权”,这就是为什么没有语言/运行时/操作系统/等。据我所知尝试这样做。
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |