스레드란 무엇인가?
스레드(Thread)는 프로그램의 실행 경로를 의미합니다. 각 스레드는 고유한 제어 흐름을 정의하며, 하나의 프로세스 내에서 여러 작업을 동시에 수행할 수 있도록 해줍니다.
C#에서는 System.Threading 네임스페이스를 통해 스레드를 생성하고 관리할 수 있으며, 스레드는 크게 백그라운드 스레드(Background Thread)와 포어그라운드 스레드(Foreground Thread) 두 가지 유형으로 나뉩니다.
백그라운드 스레드(Background Thread)
백그라운드 스레드는 모든 포어그라운드 스레드가 종료되면 자동으로 중단되는 스레드입니다. 즉, 응용 프로그램이 종료되는 시점에 백그라운드 스레드가 아직 실행 중이라 하더라도 강제로 종료됩니다.
스레드가 백그라운드 스레드인지 여부는 IsBackground 속성으로 확인하거나 설정할 수 있습니다. 이 속성은 해당 스레드가 백그라운드 스레드인지를 나타내는 값을 가져오거나 설정하는 역할을 하며, 기본값은 false입니다. 이는 기본적으로 생성되는 스레드가 포어그라운드 스레드이기 때문입니다.
백그라운드 스레드를 생성하는 방법은 다음과 같습니다.
Thread bgThread = new Thread(tStart);
bgThread.IsBackground = true;
bgThread.Start();위 코드처럼 IsBackground 속성을 true로 설정한 후 Start() 메서드를 호출하면, 해당 스레드는 백그라운드 스레드로 동작하게 됩니다.
포어그라운드 스레드(Foreground Thread)
포어그라운드 스레드는 마지막 포어그라운드 스레드가 종료될 때까지 계속 실행됩니다. 즉, 응용 프로그램은 모든 포어그라운드 스레드가 완료될 때까지 종료되지 않습니다.
C#에서 기본적으로 생성되는 스레드는 모두 포어그라운드 스레드입니다. 따라서 별도의 설정 없이 스레드를 생성하면, 해당 스레드가 작업을 마칠 때까지 응용 프로그램은 종료되지 않고 대기하게 됩니다.
두 스레드의 핵심 차이점
- 포어그라운드 스레드: 모든 포어그라운드 스레드가 종료되어야 응용 프로그램이 종료됩니다.
- 백그라운드 스레드: 포어그라운드 스레드가 모두 종료되면, 백그라운드 스레드는 실행 중이라도 즉시 종료됩니다.
따라서 로깅, 모니터링 등 응용 프로그램 종료 시 반드시 완료될 필요가 없는 보조 작업에는 백그라운드 스레드를, 반드시 끝까지 수행해야 하는 핵심 작업에는 포어그라운드 스레드를 사용하는 것이 좋습니다.