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

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

5 ответов


с MSDN:

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


посмотреть на этой странице:

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

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


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


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


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