gpt4 book ai didi

multithreading - 如果在MVar/Chan/TQueue上无限期阻塞,Haskell线程是否会被GC?

转载 作者:行者123 更新时间:2023-12-03 13:04:15 24 4
gpt4 key购买 nike

我有一个线程反复从MVar/Chan/TQueue/etc中提取,然后进行一些处理。如果该线程具有对该MVar/Chan/TQueue的唯一剩余引用,并且将被无限期阻止,该线程是否会被GC? (这是MVarChan还是TQueue都重要吗?)我们可以依靠这个GC来发生吗?在什么情况下可能不会发生?

如果没有发生GC或认为它过于脆弱,那么关闭像这样的不确定读取时阻塞的线程的首选方法是什么?

最佳答案

综上所述,答案是,确定唯一拥有MVarTVar(支持ChanTQueueTMVar等)且在某些使用该引用时被阻塞的 sleep 线程将引发异常,如果未被捕获,将终止线程。真的就是这么简单。

注意事项是:

  • 您不知道GC何时运行,或者它会变得多么激进(也许MVar被提升为不经常收集的老一代?),因此您不应该对对象何时变得不可访问做出假设。运行时的眼睛。请注意,这对于在GC语言中变得不可访问的任何运行时值都是如此,因此,它并不是特定于Haskell并发性的。
  • 从理论上讲,很难推断何时可以到达对象,尤其是在存在优化的情况下。好的。

  • 因此,使用这些运行时触发的异常关闭线程(并回收其内存)是非常合理的,否则,该线程将永远处于 sleep 状态,只要您不关心线程关闭的时间以及希望获得一些模糊的保证,即当运行时需要释放一些内存时,可以在某个时候关闭线程。对于在GC语言中超出范围的任何值,这与您所做的推理完全相同-在某个时候,也许很快,也许永远不会,也许一个小时后,GC将回收此内存。如果您需要对时间进行更严格的控制等,请不要将任务外包给GC。

    关于multithreading - 如果在MVar/Chan/TQueue上无限期阻塞,Haskell线程是否会被GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36310299/

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