C# 멀티스레딩이란 무엇인가?
멀티스레딩(Multithreading)은 하나의 프로세스 내에서 여러 작업을 동시에 실행할 수 있게 해주는 프로그래밍 기법입니다. C#에서는 System.Threading.Thread 클래스를 사용하여 스레드를 생성하고 제어할 수 있습니다. 이 클래스를 통해 멀티스레드 애플리케이션에서 개별 스레드를 만들고 접근하는 작업이 가능합니다.
메인 스레드(Main Thread)와 자식 스레드
프로세스에서 가장 먼저 실행되는 스레드를 메인 스레드라고 부릅니다. C# 프로그램이 실행되기 시작하면 메인 스레드가 자동으로 생성되며, Thread 클래스를 사용해 새로 만든 스레드들은 모두 이 메인 스레드의 자식 스레드(Child Thread)가 됩니다.
예제 1: 현재 실행 중인 스레드 확인하기
다음 예제는 Thread.CurrentThread 속성을 사용하여 현재 실행 중인 스레드 정보를 가져오고, 이름을 지정한 후 출력하는 방법을 보여줍니다.
using System;
using System.Threading;
namespace Demo {
class Program {
static void Main(string[] args) {
Thread th = Thread.CurrentThread;
th.Name = "MainThread";
Console.WriteLine("This is {0}", th.Name);
Console.ReadKey();
}
}
}프로그램이 시작되면 자동으로 생성된 메인 스레드의 이름을 "MainThread"로 설정하고 콘솔에 출력합니다.
예제 2: 자식 스레드 생성 및 관리하기
다음 예제는 ThreadStart 델리게이트를 사용하여 자식 스레드를 생성하고, Thread.Sleep() 메서드로 스레드를 일시적으로 중지하는 방법을 보여줍니다.
using System;
using System.Threading;
namespace MultithreadingApplication {
class ThreadCreationProgram {
public static void CallToChildThread() {
Console.WriteLine("Child thread starts");
// 스레드를 5000밀리초(5초) 동안 일시 정지
int sleepfor = 5000;
Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);
Thread.Sleep(sleepfor);
Console.WriteLine("Child thread resumes");
}
static void Main(string[] args) {
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}
}코드 설명
- ThreadStart 델리게이트: 스레드가 시작될 때 실행할 메서드를 지정합니다. 여기서는
CallToChildThread메서드가 자식 스레드에서 실행됩니다. - Start() 메서드: 새로 생성한 스레드를 실제로 실행합니다.
- Thread.Sleep(): 지정한 시간(밀리초 단위)만큼 스레드의 실행을 일시 중지합니다. 위 예제에서는 5000밀리초, 즉 5초간 대기합니다.
실행 결과
In Main: Creating the Child thread Child thread starts Child Thread Paused for 5 seconds Child thread resumes
실행 결과를 보면 메인 스레드에서 자식 스레드를 생성한 후, 자식 스레드가 시작되고 5초간 일시 정지했다가 다시 재개되는 과정을 확인할 수 있습니다. 이처럼 C#의 Thread 클래스를 활용하면 여러 작업을 병렬로 처리하는 효율적인 멀티스레드 애플리케이션을 손쉽게 구현할 수 있습니다.