Какой смысл этой спящей нити

Я сейчас прохожу код, который не мой. В коде есть нить со следующим кодом:

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)

Это была Java-программа, которую я кросс-компилировал в байт-код.net, а затем декомпилировал. Я не был уверен, видел ли кто-нибудь тему, посвященную сну по какой-либо причине, и если да, то в чем причина. ta.speot.is для того, чтобы дать действительно хороший ответ.

3 ответа

Решение

Давайте проигнорируем опубликованный вами код, поскольку он не будет компилироваться, и просто сосредоточимся на том, служит ли поток, который спит вечно, какой-либо цели.

Есть три причины, по которым я могу придумать нить, чья работа - спать, ни одна из них не является особенно законной.

Ничего не делать

Нить может существовать, чтобы делать ничего значимого, навсегда. Если кто-то поручил вам работу по созданию потока, который не должен делать ничего осмысленного, вы могли бы придумать этот код.

Чтобы сохранить CLR/ процесс живой

Если это поток переднего плана, поток будет поддерживать процесс и CLR, даже если основной поток завершит работу. Из MSDN:

Управляемый поток - это фоновый поток или поток переднего плана. Фоновые потоки идентичны приоритетным потокам с одним исключением: фоновый поток не поддерживает работу среды управляемого выполнения. Как только все потоки переднего плана были остановлены в управляемом процессе (где файл.exe является управляемой сборкой), система останавливает все фоновые потоки и завершает работу.

Остыть

Возможно, что связывая поток с помощью сна, другие потоки, которые могут выполнять значимую работу, запускаются не так часто (например, если они запланированы в пуле потоков или в другой среде). Из The Daily WTF:

Из-за большого количества ускорений обработки данных у процессора больше нет шансов снизить скорость. На сервере скопилось тепло, контроллер вентилятора зажарен, а процессор приготовлен. В качестве альтернативы покупке избыточного охлаждения они заставили меня замедлить работу приложения до прежних уровней производительности со стратегически размещенными спящими режимами.

Код, как написано (кроме Sleep с большой буквы), будет использоваться только для создания потока, который ничего не делает, и использует некоторую дополнительную память (для данных стека потока).

Возможно, поток был предназначен для выполнения какой-то другой функции, но, скорее всего, он должен был обрабатываться другим способом.

Из того, что вы нам показали, он просто создает нить и заставляет ее спать вечно. Без большего контекста мы не можем сказать вам больше ничего

Другие вопросы по тегам