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

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

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

#1楼 票数:0

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

  ask by Davidd12 translate from so

未解决问题?本站智能推荐:

2回复

我可以在没有使用scala-native的JVM的情况下运行我的scala程序吗?

我最近听说过scala-native,听起来很有趣! 我很好奇本地意味着什么? “提前编译器”是什么意思? 我认为网站和github存储库中的描述并不清楚。
1回复

如何在Scala本机应用程序中运行Scala测试?

我有你好世界scala本机应用程序,并希望对这个应用程序运行小scala测试我使用通常的测试命令,但它抛出异常: NativeMain.scala NativeTest.scala 我在sbt shell中运行test命令并得到了这个错误 任何帮助或建议谢谢:)?
1回复

scala 类型与短裤和乘法不匹配

我有两个函数可以找到一个数字的阶乘,一个使用整数工作,但第二个只使用 shorts 会产生错误。 这是代码 var fac16i: Function2[Short, Short, Short] = new Function2[Short, Short, Short] { @tailrec o
1回复

如何使用 Scala-native 构建静态链接的可执行文件?

我想使用 Scala Native 编写一个程序,但它必须在带有非常旧的 glibc 的 linux 主机(centos 6.5)上运行。 所以我想将该程序部署为静态链接的可执行文件,例如 golang。 如何使用 Scala-native 构建静态链接的可执行文件? 有可能吗? 如果是,我该怎么
1回复

将Scala转换为golang是否可行/有用?

最近发布了Scala native,但他们使用的垃圾收集器(目前)非常简陋 ,并且不适合严肃使用。 所以我想知道:为什么不将Scala转换为Go (一个scala.js)? 它将是一个快速,可移植的运行时。 他们的GC越来越好了。 更不用说伟大的并发模型的继承:渠道和goroutin
1回复

如何在运行时为Scala.js和JVM确定Scala版本?

这个问题类似于如何从Scala本身获取Scala版本? ,除了我也想支持Scala.js。 我尝试了util.Properties方法。 不幸的是,它在Scala.js上不可用: https://scalafiddle.io/sf/dzNAhWB/0 那么,如何在运行时为
1回复

我可以使用scala-bindgen为Objective-C和C ++生成Scala绑定吗?

我最近从Scala Native的Gitter室找到了scala-bindgen。 似乎(在当前时间点)他们正在开发一种工具,用于为C头文件生成Scala绑定。 是否也有计划为Objective-C和C ++生成Scala绑定?
1回复

我可以使用 Scala Native 作为我的程序库将包含 Scala 代码的字符串编译为机器代码吗?

我成功地使用 Scala Native 将 Scala 项目编译为机器代码。 但我想在运行时生成一些可执行代码(我计划实现一个独立的编译器,从类似 Scala 的语言到机器代码)。 目标是拥有一种独立于 JVM 的自托管语言。 是否有可能以某种方式在我的项目中嵌入 Scala Native 编译器?