CPU가 현재 작업 중인 프로세스(쓰레드)에서 다른 프로세스(쓰레드)로 넘어갈 때 지금까지의 프로세스(쓰레드) 상태를 저장하고, 새 프로세스(쓰레드)의 저장된 상태를 다시 적재하는 작업
프로세스 🎈
실행중인 프로그램으로, 운영체제에 의해 관리되며 독립적으로 실행되고 자원을 할당 받을 수 있는 단위
스레드 🎈
프로세스 내에서 실행되는 실행 단위로, 스택 영역만 할당받고 프로세스의 자원을 다른 스레드와 공유하면서 독립적으로 명령어를 실행
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() { }
}
@Component
애너테이션이 붙은 클래스 빈으로 등록!@Configuration
애너테이션이 붙은 클래스에서 @Bean
이 붙은 메서드의 반환값 빈으로 등록!위의 싱글톤 패턴 구현을 보면 알 수 있듯이, 단 하나의 객체만을 생성하여 static 영역(모두가 접근하는 공간)에 보관하는 것을 알 수 있다.
이를 통해 여러 쓰레드에서 하나의 공유 인스턴스만을 사용함으로써, Context Switching에서 발생하는 오버헤드를 줄일 수 있게 된다.
즉, 멀티 쓰레드에서 공유 영역에 데이터가 위치하기 때문에 👉 스위칭이 일어나도 메모리와 관련해서는 챙겨줘야 할 부분이 없다!
(프로세스간의 컨텍스트 스위칭이 발생했을 때에는 메모리 주소 체계가 다르기 때문에 이 때는 메모리 주소 관련된 처리를 추가로 수행해야 한다.)
더불어, 메모리 사용을 최소화하고 불필요한 인스턴스 생성을 방지할 수 있다.