>  기사  >  백엔드 개발  >  C# 포그라운드 스레드와 백그라운드 스레드를 구별하는 방법

C# 포그라운드 스레드와 백그라운드 스레드를 구별하는 방법

coldplay.xixi
coldplay.xixi앞으로
2020-07-09 17:41:043469검색

C# 포그라운드 스레드와 백그라운드 스레드를 구별하는 방법

Net의 CLR(공용 언어 런타임)은 포그라운드 스레드와 백그라운드 스레드라는 두 가지 유형의 스레드를 구분할 수 있습니다. 둘 사이의 차이점은 애플리케이션이 종료되기 전에 모든 포그라운드 스레드를 실행해야 한다는 것입니다. 반면 백그라운드 스레드의 경우 애플리케이션이 종료될 때 실행이 완료되었는지 여부를 고려하지 않고 직접 종료할 수 있습니다. Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。

这么说可能不知道有什么区别:

<strong>前台线程</strong>后台线程的区别和联系:

1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。

2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。

3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。

4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。

.net

차이점을 모를 수도 있습니다:

포그라운드 스레드

백그라운드 스레드 간의 차이점과 연결:

1. 백그라운드 스레드는 종료를 차단하지 않습니다. 프로세스. 해당 프로세스에 속한 모든 전경 스레드가 종료되면 프로세스가 종료됩니다. 나머지 모든 백그라운드 스레드가 중지되고 완료되지 않습니다.

2. Thread.IsBackground 속성을 설정하여 언제든지 전경 스레드를 배경 스레드로 변경할 수 있습니다.

3. 포그라운드 스레드이든 백그라운드 스레드이든 스레드에서 예외가 발생하면 프로세스가 종료됩니다.

4. 관리되는 스레드 풀의 스레드는 모두 백그라운드 스레드이며, 새로운 Thread 메서드를 사용하여 생성된 스레드는 기본적으로 모두 포그라운드 스레드입니다.

.net 환경에서 Thread를 사용하여 생성된 스레드는 기본적으로 포그라운드 스레드, 즉 스레드 속성 IsBackground=false입니다. 해당 프로세스에서 하나의 포그라운드 스레드가 종료되지 않는 한, 프로세스가 종료되지 않습니다. 메인 스레드는 전경 스레드입니다. 백그라운드 스레드는 스레드 종료 여부에 관계없이 모든 전경 스레드가 종료되는 한(정상 종료 및 비정상 종료 포함) 프로세스가 자동으로 종료됩니다. 일반적으로 백그라운드 스레드는 단기 작업을 처리하는 데 사용됩니다. 예를 들어 웹 서버에서는 클라이언트가 보낸 요청 정보를 처리하는 데 사용할 수 있습니다. 포그라운드 스레드는 일반적으로 웹 서버에서 클라이언트 요청을 모니터링하는 프로그램이나 특정 시스템 리소스를 정기적으로 검사하는 프로그램과 같이 장기간 대기가 필요한 작업을 처리하는 데 사용됩니다.

Case

static void Main(string[] args)
    {
      SampleTread thead = new SampleTread(10);

      SampleTread theadback = new SampleTread(10);
      var theadone = new Thread(thead.CountNumbers);
      var theadtwo = new Thread(theadback.CountNumbers);
      theadtwo.IsBackground = true;
      theadone.Start();
      theadtwo.Start();
      
    }
class SampleTread
  {
    private readonly int _iterations;
    public SampleTread(int iterations)
    {
      this._iterations = iterations;
    }
    public void CountNumbers()
    {
      for (int i = 0; i < _iterations; i++)
      {
        Sleep(TimeSpan.FromSeconds(0.5));
        Console.WriteLine($"{ CurrentThread.Name}print{i}");
      }
    }
  }
🎜Analytic🎜🎜🎜실행 결과는 현재 포그라운드 스레드가 실행을 완료한 후 백그라운드 스레드도 종료된다는 것입니다. 사실 운영체제에는 앞뒤 쓰레드 개념이 없는데 왜 그런게 있는 걸까요? 🎜🎜요점이 무엇인가요? 원래는 그렇습니다. 메인 스레드가 종료되면 스레드 개체가 해제되므로 다른 스레드도 종료되어야 합니다. 메인 스레드가 종료될 때 다른 스레드가 해제되지 않으면 다른 스레드에 대한 피해가 정말 커집니다. 스레드 작업을 더 쉽게 만들기 위해 전경 스레드와 배경 스레드의 개념을 제공합니다. 🎜🎜사용 방법은 특정 프로젝트에 따라 다릅니다. 백그라운드 스레드는 종종 보조 기능으로 사용됩니다. 예를 들어, WinForm에서는 창을 닫은 후에도 스레드 프로세스가 닫히지 않습니다. 이는 닫은 후 메인 스레드가 종료되기 때문입니다. 다른 스레드가 닫힌 후에는 메인 스레드가 안전하게 닫힙니다. 🎜🎜그래서 다른 스레드가 계속 보이는 이유는 물론 여러 프로세스가 있고 다른 프로세스의 기본 스레드가 닫혀 있지 않기 때문일 수 있습니다. 🎜🎜🎜관련 학습 권장 사항: 🎜C 비디오 튜토리얼🎜🎜🎜

위 내용은 C# 포그라운드 스레드와 백그라운드 스레드를 구별하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제