멀티쓰레드 프로그래밍

Context Switching

우대비 2024. 2. 26. 20:37
반응형

컨텍스트 스위칭(context switching)은

운영 체제가 CPU의 실행을 한 스레드에서 다른 스레드로 전환할 때 발생하는 과정입니다.

이 과정은 멀티태스킹 환경에서 필수적이며,

여러 프로세스나 스레드가 동시에 실행되는 것처럼 보이게 합니다.

스레드 컨텍스트 스위칭은 CPU가 현재 실행 중인 스레드의 상태(컨텍스트)를 저장하고,

다른 스레드의 상태를 불러오는 작업을 포함합니다.

이 상태에는 프로그램 카운터, 레지스터 세트, 스택 포인터 등이 포함됩니다.

 

 

스레드 컨텍스트 스위칭은 다음과 같은 상황에서 발생할 수 있습니다:

  1. 멀티프로세싱: 운영 체제가 공정한 CPU 시간 할당을 위해 여러 스레드 간에 전환합니다.
  2. 입출력 요청: 스레드가 입출력 작업을 요청하고, 해당 작업이 완료될 때까지 대기하는 동안 다른 스레드가 CPU를 사용할 수 있습니다.
  3. 우선순위: 더 높은 우선순위를 가진 스레드가 실행을 요청할 경우, 낮은 우선순위의 스레드는 실행을 중단하고 대기 상태가 될 수 있습니다.

아래는 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