면접 단골 질문이라고 하는 "프로세스와 스레드에 관하여" 이 질문의 의도는 운영체제가 시스템 자원을 어떤 단위로 할당해주고, 프로세스 내에서 스레드는 이 자원을 어떻게 활용하는 지라고 생각한다.
1. 프로세스
-사전적인 의미로는 "운영체제로부터 할당받는 시스템 자원의 작업 단위", "메모리에 올라와 실행되고 있는 프로그램의 인스턴스" 라고 한다.
-먼저 프로그램이란 운영체제로부터 아직 시스템 자원을 할당받지 못한 정적인 상태의 코드 덩어리 라고 할 수 있다.
이 프로그램이 실행하는 순간 운영체제가 시스템 자원을 할당해주고 메모리에 올라가게 되는데 이 상태를 프로세스라고 하는 것이다.
단점
1. 프로세스는 독립적인 메모리 영역(code, data, heap, stack)을 할당 받는다.
그래서 프로세스끼리는 서로 접근할 수가 없어 프로그램간의 통신방법을 사용해야 한다.
-> 서로 접근이 불가해서 통신의 어려움
2. 프로세스는 생성될 때 큰 오버헤드를 가지고 온다.
이 단점들을 보완해주기 위해서 스레드가 나왔다.
2. 스레드
-프로세스가 할당받은 자원을 이용하여 실행하는 작업의 단위
-프로세스 내에서 실행되는 작업의 단위
-프로세스의 단점을 보완하기 위해 나온 것인 만큼 특징도 알맞다.
1. 스레드는 메모리 영역 중 독립적으로 stack 영역만 할당 받고 code, data, heap 영역은 서로 공유한다.
-> 프로세스는 서로 접근이 힘들다고 했는데 스레드는 공유가 가능하기 때문에 단점이 보완된다.
2. 프로세스 내에서 실행되는 작업의 단위이니 당연히 프로세스에 비해 오버헤드가 덜 함.
단점
-스레드를 이용하면 시스템 자원을 효율적으로 사용한다는 장점이 있다.
하지만 스레드는 자원을 서로 공유하기 때문에 멀티스레딩을 할 때 프로그래머가 동기화에 대해서 주의해야한다.
-Reference
'면접 스터디' 카테고리의 다른 글
면접스터디 : GC(Garbage Collection)와 ARC (0) | 2023.01.10 |
---|---|
면접스터디 : Class의 성능을 향상시킬 수 있는 방법들을 나열 (0) | 2022.12.28 |
면접스터디 : Copy-on-Write (0) | 2022.12.22 |
면접 스터디 : Class vs Struct vs Enum (0) | 2022.12.20 |