【发布时间】:2023-03-03 15:08:02
【问题描述】:
我必须运行复杂的异步计算,并且能够随时(从计算外部)中止它们。
当前实现使用 scala.concurrent.Future 来运行计算。但是,似乎没有明显的方法可以在执行期间取消 scala Future。
我已经找到并尝试了许多针对此问题的推荐解决方案,例如使用 Promise 实现 cancellable Future 或使用具有 cancel() 方法的 java.util.concurrent.Future。
它们都有相同的问题:执行仅在到达 Thread.sleep() 调用时中止。
这是一个问题有两个原因:
- 计算应尽快完成。即使增加非常短的睡眠时间也会适得其反。
- 我不是这些计算的主要开发者,我希望避免对计算的实现施加任意约束。
【问题讨论】:
-
"执行仅在到达 Thread.sleep() 时中止"。这不是真的。每当到达检查线程中断状态的合适代码时,它将中止。
-
如果您不得不担心流程中的中断,听起来您的计算量太大了。你没有说你有什么样的工作负载以及它有多容易并行化。
-
@ChrisMowforth 您所说的“中流”中断是什么意思?我没有详细介绍工作负载,因为它几乎可以是从简单的字数到复杂的视频过滤器或模拟的任何东西。我正在为这些计算提供一个运行环境,如果需要,我必须能够杀死它们。这些计算由第三方实现。
-
Akka 演员主管接收工作,产生一个童工。主管收到解雇通知,杀死童工。
标签: java multithreading scala concurrency akka