AI
プログラミング競技では、AI
がJVM
で実行され、当社ではAPI
を提供しています。 SecurityManager
で何ができるのかを制限してサンドボックスに入れ、実行時にはそれらの決定であるいくつかのフラグを設定するだけです。私たちのシステムと彼らのAI
との間の唯一のやりとりは、これらのフラグを介しているため、スレッドが突然死亡した場合に悪影響はありません。中断しないスレッドを殺すには?
AI
の計算時間が長すぎる場合は、スレッドをシャットダウンします。しかし、スレッドを破棄する方法を見つけることはできません。考えられる理由の1つは、AI
がブロックなしで無限ループに入り、Thread.interrupt()
が役に立たなくなることです。 Thread.stop()
は信頼できません。なぜなら、try catchブロック内にある場合、ThreadDeath
例外がキャッチされ、何も悪いことに触れず、死ぬかどうか気にしないため、私たちにとって問題はありません。
現在のところ、スレッドは無視され、タイムアウト後もスレッドなしで続行されますが、無限ループは、JVM
が終了するまでバックグラウンドで処理を続けます。これは私たちには受け入れられません。なぜなら、Webサーバーのバックグラウンドで24時間365日の試合が行われるため、できるだけ多くの安定性が欲しいからです。 1つの考えは、別々のJVM
で各ゲームを実行することでしたが、それは私たちが得たいと思っているよりはるかに複雑です。
スレッドを破壊する確実な方法はありますか?
あなたが制御できるスレッドにコードをロードしてください – L7ColWinters
なぜ 'Thread.stop()'がオプションではないのかをより明確に説明してください。 – Tudor
APIに応じて、コードを別のプロセスで実行し、応答しなくなった場合には単純に終了させることができます。 –