• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • 컨텍스트 스위칭(Context Switching): 멀티태스킹의 핵심 원리
    2024년 03월 18일
    • 유니얼
    • 작성자
    • 2024.03.18.:03
    728x90

    C# 게임 서버 만들기

    현대의 컴퓨팅 시스템은 멀티태스킹을 통해 여러 프로세스와 쓰레드를 동시에 실행할 수 있습니다. 이를 가능하게 하는 핵심 원리 중 하나가 바로 컨텍스트 스위칭(Context Switching)입니다. 이 글에서는 컨텍스트 스위칭의 개념, 작동 방식, 그리고 이로 인해 발생할 수 있는 오버헤드에 대해 알아보겠습니다.

    컨텍스트 스위칭이란?

    컨텍스트 스위칭은 CPU가 한 프로세스(또는 쓰레드)의 실행을 중단하고 다른 프로세스(또는 쓰레드)로 전환하는 과정입니다. 이 과정에서 현재 실행 중인 프로세스의 상태(컨텍스트)를 저장하고, 이전에 중단된 다른 프로세스의 상태를 복원합니다. 컨텍스트에는 프로세스의 프로그램 카운터, 레지스터 값, 메모리 상태 등이 포함됩니다.

    작동 방식

    컨텍스트 스위칭은 운영 체제의 스케줄러에 의해 관리됩니다. 스케줄러는 다음과 같은 상황에서 컨텍스트 스위칭을 발생시킬 수 있습니다:

    • 실행 중인 프로세스가 입출력 작업을 요청하고, 결과를 기다리는 동안 CPU가 다른 작업을 수행할 수 있을 때
    • 실행 중인 프로세스가 할당된 시간을 모두 사용했을 때(타임 슬라이스 종료)
    • 높은 우선순위의 프로세스가 실행을 요구할 때

    오버헤드

    컨텍스트 스위칭은 유용하지만, 이 과정에서 발생하는 오버헤드가 있습니다. 컨텍스트를 저장하고 복원하는 데 시간이 소요되며, 이로 인해 CPU의 유휴 시간이 발생할 수 있습니다. 따라서, 컨텍스트 스위칭이 너무 자주 발생하면 시스템의 전반적인 성능이 저하될 수 있습니다.

    예제 코드

    컨텍스트 스위칭을 직접적으로 시뮬레이션하는 것은 복잡하지만, 다음은 멀티쓰레딩 환경에서 여러 쓰레드를 동시에 실행하고, 스케줄러가 컨텍스트 스위칭을 수행하는 과정을 간접적으로 보여주는 예제입니다.

    using System;
    using System.Threading;
    
    class ContextSwitchExample
    {
        static void PrintNumbers()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}: {i}");
                // 컨텍스트 스위칭을 유도하기 위해 각 반복마다 잠시 대기
                Thread.Sleep(10);
            }
        }
    
        static void Main()
        {
            Thread t1 = new Thread(PrintNumbers);
            Thread t2 = new Thread(PrintNumbers);
            t1.Start();
            t2.Start();
        }
    }

    이 코드에서는 두 개의 쓰레드를 생성하고, 각 쓰레드가 숫자를 출력하는 작업을 수행합니다. Thread.Sleep 메서드는 각 반복마다 쓰레드를 잠시 대기 상태로 전환시킵니다. 이 대기 시간 동안, 스케줄러는 실행 중인 쓰레드를 중단하고 다른 쓰레드로 전환할 수 있습니다. 결과적으로, 이 예제는 멀티쓰레딩 환경에서의 컨텍스트 스위칭 과정을 간접적으로 보여주게 됩니다.

    결론

    컨텍스트 스위칭은 멀티태스킹을 가능하게 하는 핵심 원리입니다. 이를 통해 여러 프로세스와 쓰레드가 CPU 시간을 공유하여 동시에 실행될 수 있습니다. 그러나 컨텍스트 스위칭 오버헤드를 최소화하기 위해 효율적인 스케줄링 전략이 필요하며, 멀티쓰레딩을 설계할 때는 이러한 점을 고려해야 합니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바