Scala 本机线程和 GC 问题

Dav*_*d12 5 multithreading scala scala-native

目前 ScalaNative 是单线程的。但是我们可以使用 POSIX API(例如)来创建和管理线程(以及共享资源)。

我的问题与垃圾收集器有关:

  • 使用带有线程的 Scala 原生及其默认 GC (immix) 是否安全?
  • 如果答案是肯定的。此解决方案可能不如预期的那样有效;有一些基准吗?
  • 如果答案是否定的。将 GC 更改为声称是并发的 Boehm 是否聪明?

opt*_*kos 0

    \n
  • 不,目前(Scala Native 版本 0.4.0,2021 年 1 月 19 日)在除严格单线程之外的任何情况下使用 Scala Native 和 immix 作为 GC 并不安全。评论https://github.com/scala-native/scala-native/issues/101#issuecomment-633495602讨论了当时(2020 年 5 月 25 日)对多线程混合和影响的一些实验GC 上的绿色线程数。
  • \n
  • 尽管 Boehm GC 本身可能能够支持多线程 GC,但它取决于该语言的其余运行时和内存模型与 Boehm 垃圾收集器中的多线程 GC 规则正确交互,而 Scala Native 目前还没有这样做,例如\xe2\x80\x9c安全点\xe2\x80\x9d。
  • \n
  • 据我了解,多线程 Scala Native 的粗略用法是每个线程都有一个 GC,并保持该线程的所有分配只能在该线程上访问,这样就不会出现任何实例的线程间访问,因此每个线程都是隔离的,就好像它对于该线程可以看到的所有内容都是单线程的。但这种对每个线程的简单粗暴的严格隔离并不是多线程应用程序通常的含义。
  • \n
\n