我试图了解如何将我的 Java 国际象棋引擎移植到飞镖。
所以我明白我应该使用 Isolates 和/或 Futures 来与 GUI 并行运行我的引擎,但是我怎样才能强制引擎终止搜索。
在java中,我只是设置了一些在引擎线程和gui线程之间共享的布尔值。
我试图了解如何将我的 Java 国际象棋引擎移植到飞镖。
所以我明白我应该使用 Isolates 和/或 Futures 来与 GUI 并行运行我的引擎,但是我怎样才能强制引擎终止搜索。
在java中,我只是设置了一些在引擎线程和gui线程之间共享的布尔值。
您应该向隔离者发送消息,告诉它停止。您可以简单地执行以下操作:
port.send('STOP');
需要明确的是,isolates 和 futures 是两个不同的东西,你使用它们的方式也不同。
当您希望某些代码在单独的“隔离内存堆”中真正并发运行时,请使用隔离。隔离就像一个小程序,与您的主程序分开运行。您发送隔离消息,您可以接收来自隔离的消息。
当您希望稍后在值可用时收到通知时,请使用未来。“稍后”被定义为“事件循环中的未来滴答”。每个隔离都有自己的事件循环。重要的是要理解,仅仅要求 Future 运行一个函数并不会使函数并行运行。它只是将函数放到事件循环中以“稍后”运行。
回答隐含的问题“我怎样才能让隔离中的长时间运行的任务停止运行?” 而不是更明确地问“我怎样才能使隔离终止,释放它的资源并且通常不再存在?”
将长期运行的任务分解成更小、更短的运行单元。
用 . 执行每个单元Future
。链期货酌情。
提供每个单元在执行其逻辑之前应检查的标志。如果设置了标志,则保释。
收听“停止”消息并在收到时设置标志。
将主处理任务拆分为 Futures 允许处理停止消息在主任务处理单元之前进入事件队列。
现在有iso.Isolate.kill()
- 警告:此方法是实验性的,尚未在每个平台上处理。