컨텍스트 스위칭과 싱글톤 패턴

sunny·2024년 5월 12일
1

Context Switching이란,

CPU가 현재 작업 중인 프로세스(쓰레드)에서 다른 프로세스(쓰레드)로 넘어갈 때 지금까지의 프로세스(쓰레드) 상태를 저장하고, 새 프로세스(쓰레드)의 저장된 상태를 다시 적재하는 작업

  • 스위칭 될 때마다 이전에 어디까지 수행했고 register에 어떤 값이 저장되어있는지 정보가 필요한데 이 총체적인 정보를 context라고 한다.
  • 그래서 현재 실행 중인 작업의 context를 저장하고, 다음에 실행될 작업의 context를 불러오는 과정이 context switching이다!
  • 이 과정은 시간과 자원을 소모하므로, 효율적인 스케줄링이 중요하다!
    • context switching이 자주 발생하면 CPU 성능 저하가 발생할 수 있다.

멀티 프로세스 vs 멀티 쓰레드

프로세스 🎈

실행중인 프로그램으로, 운영체제에 의해 관리되며 독립적으로 실행되고 자원을 할당 받을 수 있는 단위

스레드 🎈

프로세스 내에서 실행되는 실행 단위로, 스택 영역만 할당받고 프로세스의 자원을 다른 스레드와 공유하면서 독립적으로 명령어를 실행

  • Context Switching 속도:
    • 멀티 쓰레드가 빠르다!
    • 적은 메모리 공간 차지: 멀티 프로세스가 멀티 쓰레드보다 메모리 공간, CPU를 더 많이 차지한다.
    • 자원 공유: 멀티 쓰레드는 멀티 프로세스와 달리 스택 영역을 제외하고는 메모리, CPU 등의 자원을 공유한다.
      • But, 동기화 문제 신경 써야 함..
  • 장애 발생:
    • 멀티 스레드는 하나의 스레드 장애가 전체를 위협할 수 있다 😭
    • But, 멀티 프로세스는 하나의 프로세스 장애가 다른 프로세스에 영향을 주지 않는다.

컨텍스트 스위칭을 줄이는 방법, 싱글톤 패턴?

Singleton Pattern이란? 🤔

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 단 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 반환한다.

싱글톤 패턴의 구현

  • 기본 구현
    class A {
    		// 1. static 영역에 객체를 1개만 생성
    		private static final A instance = new A();
    		
    		// 2. getInstance 메서드로만 객체 반환
    		public static A getInstance() {
    				return instance();
    		}
    		
    		// 3. private 생성자를 통해 외부 생성 제한
    		private A() { }
    }
  • 스프링에서의 Singleton pattern
    • 스프링에서는 스프링 컨테이너를 통해 객체를 싱글톤으로 관리한다!
    1. 개발자가 빈으로 등록하고 싶은 클래스를 설정한다. (방법은 아래와 같다)
      • @Component 애너테이션이 붙은 클래스 빈으로 등록!
      • @Configuration 애너테이션이 붙은 클래스에서 @Bean이 붙은 메서드의 반환값 빈으로 등록!
    2. 이후 스프링을 실행하여 IoC Container가 생성되면, 해당 빈을 등록하고 Container에서 관리한다.
      • 스프링 IoC 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 전 콜백 메소드 호출 → 스프링 종료

컨텍스트 스위칭과 싱글톤 패턴

위의 싱글톤 패턴 구현을 보면 알 수 있듯이, 단 하나의 객체만을 생성하여 static 영역(모두가 접근하는 공간)에 보관하는 것을 알 수 있다.

이를 통해 여러 쓰레드에서 하나의 공유 인스턴스만을 사용함으로써, Context Switching에서 발생하는 오버헤드를 줄일 수 있게 된다.

즉, 멀티 쓰레드에서 공유 영역에 데이터가 위치하기 때문에 👉 스위칭이 일어나도 메모리와 관련해서는 챙겨줘야 할 부분이 없다!

(프로세스간의 컨텍스트 스위칭이 발생했을 때에는 메모리 주소 체계가 다르기 때문에 이 때는 메모리 주소 관련된 처리를 추가로 수행해야 한다.)

더불어, 메모리 사용을 최소화하고 불필요한 인스턴스 생성을 방지할 수 있다.

0개의 댓글

관련 채용 정보