gpt4 book ai didi

multithreading - 限制 GHC 中每个线程的线程内存访问

转载 作者:行者123 更新时间:2023-12-04 06:49:23 26 4
gpt4 key购买 nike

我想知道,是否可以限制线程使用的内存量?我正在考虑运行一个提交和运行不受信任的用户代码的服务器。我可以使用 SafeHaskell 来确保它不会执行任何未经授权的 IO,但我需要确保用户的代码不会导致整个服务器崩溃,即导致堆栈溢出或内存不足堆错误。

有没有办法限制每个单独的线程可以访问的内存量,或者有什么方法可以确保如果一个线程消耗大量内存,那么只有那个线程会被终止?

也许,有没有办法当任何线程遇到内存不足错误时,我可以捕获异常并选择哪个线程死亡?

我更多地谈论并发,在 forkIO 和 STM 线程的意义上,而不是 par 和 seq 的并行。

注意:这与 this question 非常相似,但它从未收到一般问题的答案,而是针对问题的特定场景的答案。此外,自 2011 年以来,GHC 7.8 中可能发生了一些变化,也许是新的 IO 管理器?

最佳答案

我不了解 Haskell,但总的来说,您的问题的答案是否定的。在所有编程语言/运行时/操作系统/等中。据我所知,线程只不过是通过相同代码执行的不同路径。在这种情况下,重要的是线程总是共享相同的虚拟地址空间。

话虽如此,您的特定语言和运行时系统中的内存分配器无法使用特定于线程的变量来跟踪任何给定线程分配了多少,并施加任意限制,这并没有技术原因。

没有技术原因为什么它不能这样做,但是如果线程 A 分配了一个随后由线程 B、线程 C、线程 D 访问的对象,那么惩罚线程 A 分配它有什么意义呢?在一般情况下,没有实用的方法来跟踪由许多线程访问的对象的“所有权”,这就是为什么没有语言/运行时/操作系统/等。我知道尝试这样做。

关于multithreading - 限制 GHC 中每个线程的线程内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com