반응형
컨텍스트 스위칭(context switching)은
운영 체제가 CPU의 실행을 한 스레드에서 다른 스레드로 전환할 때 발생하는 과정입니다.
이 과정은 멀티태스킹 환경에서 필수적이며,
여러 프로세스나 스레드가 동시에 실행되는 것처럼 보이게 합니다.
스레드 컨텍스트 스위칭은 CPU가 현재 실행 중인 스레드의 상태(컨텍스트)를 저장하고,
다른 스레드의 상태를 불러오는 작업을 포함합니다.
이 상태에는 프로그램 카운터, 레지스터 세트, 스택 포인터 등이 포함됩니다.
스레드 컨텍스트 스위칭은 다음과 같은 상황에서 발생할 수 있습니다:
- 멀티프로세싱: 운영 체제가 공정한 CPU 시간 할당을 위해 여러 스레드 간에 전환합니다.
- 입출력 요청: 스레드가 입출력 작업을 요청하고, 해당 작업이 완료될 때까지 대기하는 동안 다른 스레드가 CPU를 사용할 수 있습니다.
- 우선순위: 더 높은 우선순위를 가진 스레드가 실행을 요청할 경우, 낮은 우선순위의 스레드는 실행을 중단하고 대기 상태가 될 수 있습니다.
아래는 C#에서 여러 스레드를 사용하는 간단한 예제입니다
using System;
using System.Threading;
class Program
{
static void Main()
{
// 스레드 생성 및 시작
Thread thread1 = new Thread(() => PrintNumbers("Thread 1"));
thread1.Start();
Thread thread2 = new Thread(() => PrintNumbers("Thread 2"));
thread2.Start();
// 메인 스레드의 작업
PrintNumbers("Main thread");
}
static void PrintNumbers(string threadName)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"{threadName}: {i}");
// 스레드를 잠시 멈추게 하여 컨텍스트 스위칭을 유도
Thread.Sleep(1);
// 조건부 양도 나와 우선순위가 같거나 높은 쓰레드한테 양도 (우선수위가 낮은애 한테는 양도x)
Thread.Sleep(0);
// 무조건 양도
Thread.Yield();
}
}
}
결과
Main thread: 0
Thread 1: 0
Thread 2: 0
Thread 2: 1
Thread 1: 1
Main thread: 1
Thread 2: 2
Thread 1: 2
Main thread: 2
Thread 1: 3
Thread 2: 3
Main thread: 3
Main thread: 4
Thread 2: 4
Thread 1: 4
반응형
LIST
'멀티쓰레드 프로그래밍' 카테고리의 다른 글
ManualResetEvent (0) | 2024.02.27 |
---|---|
AutoResetEvent (0) | 2024.02.26 |
SpinLock (0) | 2024.02.23 |
DeadLock (0) | 2024.02.23 |
Locking (0) | 2024.02.23 |