Thread 개념
Process
- 실행중인 프로그램
- 스케줄링(생성 → 준비 → 실행 → 대기 → ... → 종료)
- 멀티태스킹
Thread
- OS가 CPU 시간을 할당하는 기본 단위
- 프로세스는 하나 이상의 스레드로 구성
- 활용할 수 있는 대표적인 상황 : file read/write
- 단점
- 구현, 디버그, 유지보수의 어려움
- 여러 스레드 중 하나의 스레드에만 문제가 생겨도 프로세스 전체에 영향을 줄 가능성
- 빈번한 컨텍스트 스위칭이 일어나면서 성능이 저하될 가능성
C# Thread
Namespace |
System.Threading |
Inheritance |
Object → CriticalFinalizerObject → Thread |
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject
using System;
using System.Diagnostics;
using System.Threading;
public class Example
{
public static void Main()
{
var th = new Thread(ExecuteInForeground);
th.Start();
Thread.Sleep(1000);
Console.WriteLine("Main thread ({0}) exiting...",
Thread.CurrentThread.ManagedThreadId);
}
private static void ExecuteInForeground()
{
var sw = Stopwatch.StartNew();
Console.WriteLine("Thread {0}: {1}, Priority {2}",
Thread.CurrentThread.ManagedThreadId,
Thread.CurrentThread.ThreadState,
Thread.CurrentThread.Priority);
do {
Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
Thread.CurrentThread.ManagedThreadId,
sw.ElapsedMilliseconds / 1000.0);
Thread.Sleep(500);
} while (sw.ElapsedMilliseconds <= 5000);
sw.Stop();
}
}
Thread Class (System.Threading)