You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
코드(Code) 영역
- 실행할프로그램의코드및매크로상수가기계어형태로저장되는영역
- CPU는Code영역에저장된명령어를하나씩처리함데이터(Data) 영역
- 코드에서선언한전역변수와정적(static) 변수가저장되는영역
- 데이터영역은프로그램의시작과함께할당되어종료될때소멸staticintROW = 10;
스택(Stack) 영역
- 함수내에서선언된지역변수, 매개변수, 리턴값등이저장되는영역
- 함수호출시기록하고함수의종료와함께제거됨privatevoidtest() {
intv1 = 20;
if (v1 == 20) {
intv2 = 100;
Stringstr = "abc";
}
}
힙(Heap) 영역
- 관리가가능한데이터외의다른형태의데이터를관리하기위한공간
- 동적메모리할당공간으로사용이끝나면운영체제가사용할수있도록반납해야함(GC)
- 동적메모리할당은어느시점에어느정도의공간을할당할수있을지정확히예측할수없고, 런타임에확인가능int[] arr = newint[5];
List<Integer> list = newArrayList<>();
프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음
기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있음
각 프로세스는 별도의 주소 공간에서 실행되며, 서로 다른 프로세스간의 변수나 자료구조에 접근할 수 없음
멀티 프로세스(Multi Process)
하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 과정
장점
여러 개의 프로세스 중 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에 영향이 가지 않음
각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당됨
구현이 비교적 간단함
단점
메모리 사용량이 많음
*Context Switching과정에서 캐쉬 메모리 초기화 등 무거운 작업이 실행되고, 많은 시간이 소모되는 오버헤드 발생
*Context Switching: CPU는 한 번에 한 개의 일만 처리가 가능한데, 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고 관리함
실제 프로세스들은 동시에 작업을 하는 것 처럼 보이지만, 상상 이상으로 빠른 CPU로 인해 프로세스들을 번갈아가며 실행한다.
이를 *Context Switching 이라고 한다.
즉 Context Switching란? CPU에서 여러 프로세스들을 번갈아가며 작업을 처리하는 과정
1) 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고
2) 대기중인 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업
스레드(Thread)
프로그램(프로세스) 내에서 실행되는 흐름의 단위
프로세스가 할당받은 자원을 이용하는 실행의 단위
프로그램은 둘 이상의 스레드를 동시에 실행할 수 있음(멀티스레드)
스레드는 프로세스 내에서 Stack만 따로 할당을 받고, Code, Data, Heap 영역은 공유함
스레드는 한 프로세스 내에서 동작되는 여러 실행 흐름으로, 프로세스 내의 주소공간이나 자원(Code, Data, Heap)을 공유
같은 프로세스에 있는 여러 스레드들은 같은 Heap 공간을 공유하는 반면 프로세스는 다른 프로세스의 메모리에 접근할 수 없음
멀티 스레드(Multi Thread)
하나의 애플리케이션을 여러 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 과정
윈도우나 리눅스 등의 많은 OS에서 멀티 스레딩을 기본으로 하고있음
장점
시스템 자원 소모(자원 효율성 증가)
프로세스와는 달리 메모리를 공유하므로 스레드간 데이터를 주고받는게 간단함
시스템콜이 줄어들어 자원을 효율적으로 관리할 수 있음
시스템 처리량 증가(처리 비용 감소)
스레드 사이의 작업량이 작아 Context Switching이 빠름
단점
구현 및 테스트, 디버깅이 어려움
자원을 공유하는 문제가 발생함(동기화 문제)
하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음
스레드의 Context Switching vs 프로세스의 Context Switching
스레드 Switching은 동일한 프로세스내 한 스레드에서 다른 스레드로 Context Switching)
프로세스의 Switching은 프로세스간 Switching
스레드의 Switching의 경우 가상 메모리 공간이 동일하게 남는 반면에 프로세스의 Switching의 경우 그렇지 않음
요약
스레드는 프로세스의 자원을 공유하여 사용하고 프로세스가 바뀌지 않는 이상 데이터가 남아있기 때문에 그대로 사용이 가능한 반면,
프로세스가 변경하게 되면 cache의 정보, 가상 메모리 등의 정보가 모두 지워지기 때문에 데이터 접근이 오래 걸림
📝 프로세스(Process)와 스레드(Thread)
프로세스(Process)
macOS 운영체제에서 실행되고 있는 프로세스 목록
멀티 프로세스(Multi Process)
장점
단점
스레드(Thread)
멀티 스레드(Multi Thread)
장점
단점
스레드의 Context Switching vs 프로세스의 Context Switching
요약
프로세스가 변경하게 되면 cache의 정보, 가상 메모리 등의 정보가 모두 지워지기 때문에 데이터 접근이 오래 걸림
References
The text was updated successfully, but these errors were encountered: