-2

私は今、私のものではないいくつかのコードを実行しています。コードには、次のコードを含むスレッドがあります。

while (true)
{
     Thread.sleep(int.MaxValue);
}

また、InterruptedException をキャッチし、すぐにループに戻るため、ループを中断することさえできません。

なぜこのスレッドが存在するのか、目的は何なのか、誰か知っていますか?

編集: もう少しコンテキストの完全なコード:

using IKVM.Attributes;
using java.lang;
using System;
using System.Runtime.CompilerServices;
namespace applicationNamespace
{
internal sealed class DedicatedServerSleepThread : Thread
{
    internal DedicatedServer theDecitatedServer;

    [MethodImpl(MethodImplOptions.NoInlining)]
    internal DedicatedServerSleepThread(DedicatedServer dedicatedServer)
    {
        this.theDecitatedServer = dedicatedServer;
        base.setDaemon(true);
        this.start();
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    public override void run()
    {
        while (true)
        {
            try
            {
                while (true)
                {
                    System.Threading.Thread.Sleep(int.MaxValue);
                }
            }
            catch (System.Threading.ThreadInterruptedException)
            {
            }
        }
    }
    static DedicatedServerSleepThread()
    {
    }
}
}

以前のコードはいくつかの非標準ライブラリを使用しているため、小文字のスリープが有効であったことに注意してください。具体的には、ikvm ライブラリ (Java 標準ライブラリに基づいており、Java プログラムを .net にクロスコンパイルするために使用されます) を使用していました。

これは、.net バイトコードにクロスコンパイルしてから逆コンパイルした Java サーバー プログラムです。なんらかの理由で睡眠専用のスレッドを見たことがあるかどうか、もしそうならその理由が何であるかはわかりませんでした. ta.speot.is は本当に良い答えを出すためのものです。

4

3 に答える 3

3

あなたが投稿したコードはコンパイルされないので無視して、永久にスリープするスレッドが何らかの目的を果たすかどうかだけに注目しましょう。

スリープすることが仕事であるスレッドには 3 つの理由が考えられますが、どれも特に正当なものではありません。

何もしない

スレッドは、意味のあることを永遠に行わないために存在する可能性があります。意味のあることを何もしないはずのスレッドを作成する仕事を誰かがあなたに課した場合、あなたはそのコードを思いつくかもしれません。

CLR/プロセスを存続させるには

フォアグラウンド スレッドの場合、メイン スレッドが完了しても、スレッドはプロセスと CLR を維持します。MSDN から:

マネージ スレッドは、バックグラウンド スレッドまたはフォアグラウンド スレッドのいずれかです。バックグラウンド スレッドはフォアグラウンド スレッドと同じですが、例外が 1 つあります。バックグラウンド スレッドはマネージド実行環境を実行し続けません。マネージ プロセス (.exe ファイルがマネージ アセンブリ) ですべてのフォアグラウンド スレッドが停止されると、システムはすべてのバックグラウンド スレッドを停止し、シャットダウンします。

クールダウンするには

スレッドをスリープ状態にすることによって、意味のある作業を行うことができる他のスレッドがそれほど頻繁に開始されない可能性があります (たとえば、スレッドプールまたは他の環境内でスケジュールされている場合)。The Daily WTF から:

一連のデータ処理の高速化により、CPU が減速する機会がなくなりました。サーバーに熱が蓄積し、ファンコントローラーが揚げられ、CPUが調理されました。冗長冷却を購入する代わりに、戦略的に配置されたスリープを使用して、アプリケーションの速度を以前のパフォーマンス レベルまで低下させました。

于 2013-04-20T01:46:45.177 に答える
3

書かれているコードは (Sleep大文字で書かれている場合を除いて)、何もしないスレッドを作成するという目的のみを果たし、(スレッドのスタック データ用に) 余分なメモリを使い果たします。

スレッドが他の機能を実行することを意図していた可能性がありますが、別の方法で処理する必要があった可能性があります。

于 2013-04-20T01:05:43.060 に答える
1

あなたが私たちに示したことから、スレッドを作成し、それを永遠にスリープ状態にします。これ以上のコンテキストがなければ、他に何も言えません

于 2013-04-20T01:04:07.173 に答える