Skip to content

Latest commit

 

History

History
33 lines (22 loc) · 3.73 KB

[#5] 스레드와 프로세스의 차이는 무엇인가요.md

File metadata and controls

33 lines (22 loc) · 3.73 KB

스레드와 프로세스의 차이는 무엇인가요?

프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 의미합니다.

프로세스는 함수의 매개변수, 복귀주소와 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션을 포함합니다. 또한 프로세스는 프로세스 실행 중에 동적으로 할장되는 메모리인 힙을 포함합니다. 또한 하나의 프로세스는 하나의 PCB를 갖고 있으며 PCB는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조 입니다. 운영체제는 프로세스를 관리하기 위해 프로세스 생성시 PCB를 생성하며 프로세스간의 context switching이 발생할 때 진행중인 task의 내용을 PCB에 저장하게 됩니다. 이후에 다시 CPU를 할당받게 되면 PCB에 저장된 내용을 통해 해당 시점부터 task가 다시 시작될 수 있습니다.

스레드는 프로세스의 실행 단위라고 할 수 있습니다.

하나의 프로세스 내에서 독립적으로 동작하며 프로세스의 주소 공간이나 자원을 공유할 수 있습니다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택으로 구성되며 같은 프로세스에 속한 스레드들은 데이터 섹션, 전역변수와 같은 운영체제 자원들을 공유합니다. 또한 스레드는 스레드간의 자원의 생성과 관리의 중복성을 최소화하여 독립적인 작업을 수행하기 위해 각자의 스택과 PC 레지스터 값을 갖고 있습니다.

멀티스레드와 멀티프로세스 사용시 각각의 장단점이 무엇인가요?

멀티프로세스는 하나의 컴퓨터에 여러 CPU를 장착하여 하나 이상의 프로세스들을 동시에 병렬 처리하는 방식 입니다. 멀티프로세스의 장점으로는 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 주지 않고 정상적으로 수행할 수 있다는 안전성 입니다. 하지만 각각 독립된 메모리 영역을 갖고 있어 작업량이 많은 경우 오버헤드가 발생할 수 있으며 Context Switching으로 인한 성능 저하 이슈가 존재합니다.

멀티스레드는 하나의 프로세스에서 여러 스레드를 구성해 각각의 스레드가 하나의 작업을 처리하는 방식입니다. 스레드 간의 통신 시 전역 변수 또는 동적으로 할당된 Heap 영역을 사용하여 데이터를 주고 받을 수 있기 때문에 멀티프로세스 방식에 비해 메모리 공간과 시스템 자원 소모가 줄어 들게 됩니다. 하지만 서로 다른 스레드가 데이터를 공유하기 때문에 이미 사용중인 전역 변수에 접근 할 경우 잘못된 값을 읽어오거나 수정할 수 있기에 안정성 이슈가 존재합니다.

멀티프로세스의 context Switching의 경우 프로세스 간의 공유하는 데이터가 없으므로 cache가 쌓아둔 데이터를 초기화하고 새로운 cache 정보를 수집해야 한다. 반면 스레드의 경우 저장된 cache 데이터는 스레드가 변경되어도 공유하는 데이터가 있기 때문에 멀티프로세스에 비해 빠른 context switching이 일어날 수 있다.

미디어 플레이어나 메신저와 같은 하나의 프로세스에서 동영상 재생, 음악 재생 또는 채팅, 파일 전송 기능과 같이 두가지 이상의 작업을 처리하기 위해서는 멀티스레드 방식이 효율적이며 여러개의 프로세스가 필요하거나 하나의 프로세스가 root 역할을 해야하는 경우에는 멀티프로세스 방식을 사용하는 것이 효율적입니다.