Scala本机线程和GC问题

时间:2018-10-12 14:37:44

标签: multithreading scala scala-native

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

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

  • 在线程中使用scala本机及其默认GC(immix)是否安全?
  • 如果答案是肯定的。该解决方案可能没有预期的有效;有一些基准吗?
  • 如果答案是否定的。将GC更改为声称是并发的Boehm是否明智?

1 个答案:

答案 0 :(得分:0)

  • 不,目前(2021 年 1 月 19 日发布的 Scala Native 版本 0.4.0)在严格单线程之外的任何情况下使用带有 immix 作为 GC 的 Scala Native 都是不安全的。评论 https://github.com/scala-native/scala-native/issues/101#issuecomment-633495602 讨论了当时 (-as-of-25-May-2020) 多线程混合的一些实验以及绿色线程对 GC 的影响。
  • 虽然 Boehm GC 本身可能能够支持多线程 GC,但它依赖于语言的其余运行时和内存模型与 Boehm 垃圾收集器中的多线程 GC 规则正确交互,而 Scala Native 目前不这样做,例如“安全点”。
  • 据我所知,多线程 Scala Native 的粗略用法是对每个线程进行 GC 并保持该线程的所有分配只能在该线程上访问,以便 永远 没有任何线程间访问任何实例,以便每个线程都是孤立的,就好像它是单线程的,对于该线程可以看到的所有内容。但是这种对每个线程的简陋粗暴的严格隔离并不是多线程应用通常所指的。