我是一个新手,正在尝试从一本书中练习Scala。所以,我有一个例子可以按顺序和并行方式打印向量。前者完美地工作,后者会挂起控制台。
代码
val v = Vector.range(0, 10)
v.foreach(println)
代码输出
0123456789
但是如果我使用相同的代码,但是不使用foearch,而是使用par,它会冻结控制台。
val v = Vector.range(0,10)
v.par.foreach(println)
我是一名有用的助手,可以为您翻译文本。
我正在使用的书中说,输出应该类似于:
5678901234
但是它卡住了,程序永远无法完成。有人能解释一下为什么吗?
scala -Yrepl-class-based
命令启动 REPL(参见此评论)使其正常工作,但是我尝试的其他方法都没有成功(包括在命令的各个部分中添加大括号)。 - turtlemonvhclass X { Vector.range(0,10). par.foreach(print) } ; new X
,但这个不行object X { Vector.range(0,10). par.foreach(print) } ; X
. - turtlemonvhimport scala.concurrent.forkjoin.ForkJoinPool; import scala.collection.parallel.ForkJoinTaskSupport; var v = Vector.range (0,10).par; v.tasksupport = new ForkJoinTaskSupport(new ForkJoinPool(4)); v.foreach(print)
。我原以为显式地创建线程池可能有所帮助,但似乎它仍然是惰性求值的,并且我仍然遇到死锁问题。 - turtlemonvh