【发布时间】:2020-11-16 20:17:54
【问题描述】:
当我在只有 1 个内核的低功耗服务器上运行以下(简化的)代码时:
implicit val context: ExecutionContextExecutor = scala.concurrent.ExecutionContext.global
Future(blocking {
while (true) {
java.lang.Thread.sleep(1000)
println("thread 1")
}
})
while (true) {
java.lang.Thread.sleep(1000)
println("main")
}
日志中只显示“main”。如果我增加服务器以拥有更多内核,那么它就可以工作。我究竟做错了什么?即使内核有限,如何让 Scala/Java 运行每个线程?
我的理解是运行时应该使用一些逻辑来执行一个线程一段时间,然后切换到另一个线程。
scalaVersion := "2.12.12"
玩了一会儿后,我发现如果我将ExecutionContext.fromExecutor(Executors.newFixedThreadPool(30)) 用于我的 EC,它就可以工作。所以关于我理解全球 EC 和阻塞的方式一定是错误的。
【问题讨论】:
标签: multithreading scala future