Q. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.
프로세스 (Process)
: 운영 체제로부터 자원을 할당 받은 자원의 단위
- 실행되어 작업 중인 프로그램
- 메모리에 적재되고, 자원을 할당 받은 동적인 상태
- 자신만의 고유 자원을 할당 받아 사용
- 운영체제에게 stack, heap, data 등을 메모리 영역으로써 할당
스레드 (Thread)
:프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 하나의 프로세스는 하나 이상의 스레드를 가짐
- 동시에 진행되는 작업의 갈래
- 하나의 프로세스는 하나의 스레드를 가짐
- 프로세스 내에서 stack을 제외한 자원을 다른 스레드와 공유
프로세스의 자원 구조
- Text : 작성한 프로그램 함수들의 코드가 기계어 형태로 저장 되어 있음.
- Data : 코드가 실행되면서 전역 변수 등 각종 데이터가 저장 되어 있음.
- Stack : 함수 호출과 함께 할당, 호출 완료 시 소멸. 함수가 종료되면 임시적인 자료를 저장하는 독립적인 공간.
- 독립적인 함수 호출 => 독립적인 실행 흐름이 추가 됨!
- Heap : 동적으로 할당되는 데이터들이 저장되는 공간. 동적으로 할당되고 해제 됨.
스레드의 자원 공유
- 프로세스의 메모리 영역 중
Stack
만 할당받아 복사, 나머지는 다른 스레드들과 공유
컨텍스트 스위칭
프로세스
: 한 프로세스에서 다른 프로세스로 전환할 때 발생
- CPU는 하나의 프로세스만 실행 할 수 있으므로 (동시성) 여러 개의 프로세스를 번갈아가며 사용하기 위해 컨텍스트 스위칭 필요
A
프로세스가 동장 후 대기를 하면서 상태를 보관하면, 대기하고 있던 다음 순서의 B
프로세스가 동작 후 대기하면 A
가 복구 되는 작업
=> 빈번히 발생 시 시스템에 부하를 주게 됨!
스레드
: 멀티 스레딩 환경에서 스레드 간의 실행을 전좐하는 기술.
Q. 멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.
🚨멀티 프로세스 vs 멀티 프로세서
- 프로세스(process)는 하나의 프로그램에서 여러 개의 프로세스를 실행.
- 프로세서(processer)는 여러개의 CPU 코어가 하나의 시스템에서 동시에 실행 되는 것.
멀티 프로세스
: 여러개의 프로세스가 작업을 동시에 처리하는 것. (병렬처리)
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용
ex) 인터넷 새 창, PM2
장점
- 안정성
- 독립적인 공간을 가지므로 하나의 프로세스가 죽어도 다른 프로세스에는 영향을 주지 않는다.
- 새로운 기능이나 모듈 추가, 수정 시에 다른 프로세스에 영향을 주지 않음. => 규모 확장 용이
단점
- 컨텍스트 스위칭 과정에서 성능 저하가 올 수 있음
-> 프로세스 수를 적정하게 유지
-> CPU 캐시 적절하게 활용하기
- 자원 공유 비효율성
- 독립적인 공간을 가지므로 메모리 공간울 비효율적으로 사용 => 메모리 사용량 증가
멀티 스레드
: 하나의 프로세스 안에 여러개의 스레드가 존재
=> 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리 가능.
장점
- 프로세스에 비해 가벼움
- Stack,Data를 제외한 메모리 공간을 공유하기 때문.
- 자원의 효율성
단점
- 안정성
- 하나의 스레드에 이상이 생기면 다른 스레드들도 영향을 받는다.
- 동기화로 인한 성능 저하
- 공유 자원이 동기화 문제가 발생할 수 있다. => 동기화 작업 필요
- 동기화 작업
- 자원에 대한 접근을 순차적으로 통제 => 병목화 현상이 일어날 수 있음.
- =>임계영역, 뮤텍스, 세마포어 방식을 적절히 활용해야함.
- 교착상태
🤔Realization
- 왜 싱글이 멀티처럼 돌아가는지 (노드 엔진에 관련하여)
- 노드의 라이브러리(uvlib)가 어떻게 동작하는지