В CLR, какая разница между фоном и передним потоком?

В чем разница между фоновым и передним потоком?

Ответ 1

От MSDN:

Фоновые потоки идентичны передние потоки с одним исключением: фоновый поток не поддерживает управляемая среда выполнения.

Ответ 2

См. эта страница:

  • Передние потоки имеют возможность предотвратить завершение текущего приложения. CLR не будет закрывать приложение (то есть выгружать хостинг AppDomain), пока все потоки переднего плана не будут завершены.

  • Фоновые потоки (иногда называемые потоками демона) рассматриваются CLR как расходуемые пути выполнения, которые можно игнорировать в любой момент времени (даже если они в настоящее время работают над некоторой единицей работы). Таким образом, если все потоки переднего плана завершены, все и все фоновые потоки автоматически уничтожаются при выгрузке домена приложения.

Ответ 3

По умолчанию потоки являются первичными потоками, что означает, что они поддерживают приложение до тех пор, пока любой из них работает. С# также поддерживает фоновые потоки, которые не поддерживают приложение само по себе - завершение сразу же после завершения всех потоков переднего плана.

Ответ 4

Важное различие между фоновыми потоками и потоками переднего плана, которое еще не упомянуто, заключается в следующем: фоновый поток выполняется только тогда, когда число выполняемых потоков переднего плана меньше, чем число процессоров MSDN.

Ответ 5

Если какой-либо из фоновых или фоновых потоков завершается, приложение сразу же умирает. Можно изменить нить с переднего плана на задний план и наоборот в любое время в течение срока службы приложения. CLR создает два типа потоков для лучшей поддержки AppDomain. CLR принудительно завершает любые фоновые потоки, которые выполняются, если завершается поток переднего плана. Любые потоки, созданные собственным кодом, входящим в управляемую среду выполнения, помечены как фоновые потоки.

Ответ 6

Есть два типа потоков -

  • Тема переднего плана
  • Фоновая тема

    Когда мы открываем какое-либо приложение, основной поток пользовательского интерфейса имеет тип потока Foreground. Это тип потока по умолчанию. Предположим, что когда мы создаем какой-либо новый поток, по умолчанию текущим типом потока является сам передний план. Если вы хотите изменить тип потока, вам нужно выполнить threadName.IsBackground = true; Теперь начинается основная история. В чем разница? И зачем нам эти два типа?

Передний план Тема: Предположим, что мы создаем нить ThreadA. Если нам нужно, чтобы поток ThreadA продолжал выполняться, несмотря на то, что все другие потоки прерваны, даже если наш основной поток пользовательского интерфейса больше не работает, то в этом случае мы должны сохранить наш тип потока Foreground. Таким образом, если вы сохраните тип переднего плана потока, то даже если вы закроете приложение, поток переднего плана ThreadA продолжит работу, вы можете отслеживать его также в диспетчере задач.

Фоновые потоки. Теперь, если вы измените тип своего потока на фоновый, то этот поток будет зависеть от другого основного потока. Т.к. в случае, если ни один из потоков типа переднего плана больше не работает, тогда весь фоновый поток должен быть принудительно прерван.