파일 : 하나의 단위로 취급되는 연관된 레코드의 모음. 자기테이프, 디스크 등의 주기억 장치에 존재함
프로그램 : 어떤 작업을 위해 실행할 수 있는 파일
프로세스 : 프로그램을 메모리 상에서 실행중인 작업. 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램. 메모리에 올라와 실행되고 있는 프로그램의 인스턴스, 운영체제로부터 시스템 자원을 할당받는 작업의 단위,
스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위
기본적으로 프로세스마다 최소 1개의 스레드를 보유하고 있다
Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
Data : 전역변수, 정적변수, 배열 등 초기화된 데이터 (초기화된 데이터)
Heap : 동적 할당시 사용 (new(), mallock())
Statck : 지역변수, 매개변수 리턴 값 임시 메모리 영역
기본적으로 OS의 프로세스당 최소 1개의 쓰레드를 가지고 있음(메인 쓰레드)
각 프로세스는 별도의 주소 공간에서 실행되며, 서로 다른 프로세스에 접근 불가능함
한 프로세스가 다른 프로세스에 접근하려면 프로세스간 통신을 이용해야함 (파이프, 파일, 소켓 등)
쓰레드 : 프로세스 내에서 실행되는 여러 흐름의 단위
프로세스의 특정한 수행 경로
프로세스가 할당 받은 자원을 이용하는 실행의 단위
쓰레드는 프로세스 내에서 각각 스택만 따로 할당 받고. Code, Data, Heap은 공유한다.
쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내에 주소 공간이나 자원들을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행된다.
왜 멀티쓰레드를 사용할까?
과거에는 하나의 프로세스만 사용했는데, 프로그램이 복잡해져 하나의 프로세스로 어려워짐. 그래서 한 프로그램을 처리하기 위해 프로세스를 여러개 만드는 것은 어려운 일이였다. 운영체제 안정성을 위해 프로세스 마다 자신에게 할당된 메모리 내의 정보만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하려면 오류가 발생하기 때문이다.
프로세스보다 더 작은 실행단위 개념이 필요했고 이것이 쓰레드이다.
하나의 프로그램 안에서 여러 작업을 해결 하는 것이다
여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 쓰레드로 나눠가면서 하는 이유?
자원의 효율성 증대 : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 효율적임
프로세스간의 컨텍스트 스위칭 시 단순 CPU 레지스터 교체뿐만 아니라, RAM과 CPU사이의 캐시 메모리에 대한 데이터까지 초기화 되어 오버헤드가 큼
쓰레드는 프로세스 내의 메모리를 공유하여 독립적인 프로세스와 달리 쓰레드가 데이터를 주고 받는것이 간단해지고 시스템 자원 소모가 줄어ㄷ름
처리 비용 감소 및 응답 시간 감축
프로세스간의 통신 보다IPC 쓰레드 간의 통신 비용이 적으므로 작업들 간의 통신 부담이 줄어듦
스택을 제외한 모든 메모리를 공유, 컨텍스트스위칭 시 쓰레든느 스택 영역만 처리한다.
스택을 쓰레드마다 독립적으로 할당하는 이유
스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해서 사용되는 메모리 공간임.
독립적이라는 것은 독립적인 호출이 가능하다는 것이고 독립적인 실행 흐름이 추가되는 것이다. 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.
프로세스는 자신만의 고유 공간과 자원을 할당 받지만, 쓰레드는 다른 쓰레드와 공간, 자원을 공유하면서 사용함
자바 쓰레드 : 자바에서는 프로세스가 존재하지 않고 쓰레드만 존재함. JVM에 의해 스케줄 되는 실행 단위 코드 블록
단점 :
전역 변수를 사용하므로 함께 사용할 때 충돌 발생할 수 있다.
멀티프로세스 : 여러 프로세스를 병렬적으로 처리함
각각된 독립된 메모리 영역을 가지고 있어 작업량이 많을 수록 오버헤드가 발생, Context Swiching으로 인한 성능 저하
컨텍스트 스위칭
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
동작중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정
프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화 같은 무거운 작업이 진행됐을 때 오버헤드가 발생함
멀티 스레드 : 하나의 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
장점 : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소하여 전역변수와 정적변수에 대한 자료 공유 가능
단점 : 안정성 문제, 하나의 스레드가 데이터 공간을 망가뜨리면 모든 스레드가 작동 불능 상태가 됨 (공유 메모리를 갖고 있기 때문)
'개발 > Spring' 카테고리의 다른 글
자바 Hashtable, HashMap (0) | 2021.04.11 |
---|---|
JSP의 동작 원리 (0) | 2021.04.11 |
Disk (0) | 2021.04.10 |
RAM, 랜덤엑세스 (1) | 2021.04.10 |
ServletContextListner 구현 (0) | 2021.04.09 |