Home Process and Thread
Post
Cancel

Process and Thread

✏️ 프로세스란?

운영체제에서 자원을 할당하여 프로그램을 실행시키는 상태를 프로세스라 한다. 즉 프로그램이 실행중인 동적인 상태의 프로그램을 의미한다.

프로세스가 할당받는 자원은 CPU, 주소 공간이고, Code, Stack, Data, Heap의 구조로 이루어진 독립된 메모리 영역을 할당 받는다. 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스간의 자원을 공유할 수 없다. 서로 다른 프로세스의 자원을 공유하려면 IPC를 통해 공유해야한다.

여러개의 프로세스를 동시에 돌리는 멀티태스킹의 경우 동시성과 병렬성이 나타난다.

동시성은 여러개의 작업을 일부 부분씩 번갈아가며 실행시키는 Context Switching 방식으로 실행하고,

병렬성은 하나의 프로세스를 여러개의 코어를 통해 작업을 실행하는 방식이다.

process.jpeg

멀티 프로세싱

하나의 응용프로그램을 여러개의 프로세스를 구성하여 각 프로세스가 하나의 작업을 처리하는 것

장점

  • 여러 개의 프로세스중 하나의 프로세스에서 문제가 발생해도 다른 프로세스에 영향이 가지 않는다.

단점

  • Context Switching이 나타나는 과정에서 캐쉬 메모리 초기화 작업 등 무거운 작업이 진행되는 오버헤드가 발생한다.

✏️ 쓰레드란?

프로세스가 할당받은 자원을 통해 실행하는 여러 흐름의 단위이다. 스레드는 프로세스 내에서 실제 작업을 수행하는 일꾼이다. 스레드가 소속된 프로세스가 자원을 할당받으면 해당 자원을 이용한다. 프로세스는 최소 한개의 스레드를 가지며 이를 메인 스레드라 한다.

각 스레드는 독자적인 Stack 메모리를 가지며, Code, Data, Heap 영역은 공유한다. 한 스레드가 자원을 변경하면, 다른 이웃 스레드도 즉시 결과를 반영한다.

thread.jpeg

멀티 스레드

하나의 응용프로그램을 여러개의 스레드를 구성하여 각 스레드가 하나의 작업을 처리하는 것

장점

  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리
  • 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
  • 스레드 사이의 작업량이 작아 Context Switching이 빠르다.

단점

  • 주의 깊은 설계가 필요하다.
  • 디버깅이 까다롭다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
  • 다른 프로세스에서 스레드를 제어할 수 없다.

멀티프로세스 대신 멀티 쓰레드를 사용하는 이유는?

프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이 더 낫기 때문이다.

thread-process.jpeg

This post is licensed under CC BY 4.0 by the author.

완전 탐색

이벤트 루프 마이크로 태스크 큐와 매크로 태스크 큐