Process & Thread

김선미·2022년 10월 13일
0

스레드와 프로세스

  • 프로그램 : 코드가 구현되어 있는 파일
  • 프로세스 : 코드 파일이 실행되어 사용할 수 있는 상태
  • 프로그램이 프로세스가 되는 과정
    • 프로세스가 필요로 하는 재료가 메모리에 올라간다.(code, data, stack, heap)
    • 프로세스에 대한 정보(pid 등)를 담은 PCB 블럭이 프로세스 생성 시 함께 만들어진다.
    • 보통 다수의 프로세스를 동시에 사용한다 : 다수의 프로세스를 시분할로 반복하면서 점유를 전환해서 실행한다.
    • cpu에서 PCB 1이 실행 상태일 때 PCB 2는 준비 상태이고 PCB 2가 실행되면 PCB 1은 준비 상태로 전환된다 (Context Switching)
  • 스레드 : 경량화 된 프로세스
  • 스레드의 Context Switching : 공용으로 사용할 작업은 항상 존재하고 추가적인 작업만 연결하면 된다.

멀티 스레드와 멀티 프로세스

  • 하나의 어플리케이션에서 (여러 가지 작업에 대한) 처리 방식
  • 소프트웨어 측면

    멀티 스레드를 사용하는 윈도우 익스플로러에서 하나의 스레드(탭) 오류시 전체 스레드에 영향을 주는 현상

멀티 프로세스

  • 프로세스는 한 번에 한 가지 작업만 실행할 수 있기 때문에 동시에 여러 가지의 작업을 실행할 수 없다. (예: 여러 건의 로그인 처리)
  • 부모 프로세스가 fork 해서 자식 프로세스를 여러개 만들어 일을 처리하도록 한다.
    • 이때 부모 프로세스와 자식 프로세스는 별개의 메모리 영역을 확보한다.
  • 각 프로세스는 독립적으로 실행된다 (예: 구글 크롬)

멀티 스레드

  • 한 프로세스 내에서 구분된 실행 단위(예 : 인텔리제이에서 코드 작성, 코드 추천, 테스트 코드 실행을 동시에 진행)
  • 만약 프로세스가 다수의 스레드로 구분되어 있지 않으면 단일 스레드로 프로세스가 실행된다.
    • 이때 스레드 실행단위 = 프로세스 (같은 의미가 된다)
  • 작업 간에 공유자원을 사용하여 긴밀하게 연결되어 있기 때문에 한가지 스레드에 문제가 생기면 전체 스레드에 영향을 줌 (예: 인터넷 익스플로러)

멀티 코어

  • 하드웨어 측면
  • 동시성 : 싱글 코어를 가진 cpu에서 실행 단위를 시분할로 점유를 전환하며 실행하는 것, 실행 단위를 빠르게 전환하며 동시에 실행하는 것처럼 보이는 것
  • 병렬 처리 : 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 동시에 처리하는 것

리눅스의 프로세스, 스레드

  • 리눅스 커널에서는 프로세스와 스레드를 동일하게 본다.
  • 스레드는 사용자 스레드, 커널 스레드로 나뉜다.
  • 사용자 스레드와 커널 스레드 간에 연관관계가 존재한다(다대다, 다대일, 일대일)
  • 리눅스는 일대일 모델이기 때문에 각 스레드가 하나의 프로세스라고 본다.
    • light weight process : 별개의 메모리가 아닌 공유된 메모리를 사용한다.
    • 프로세스는 각각의 pid를 가지고 있지만 리눅스의 스레드는 각각의 pid를 갖고 있지는 않고, 동일한 pid, 그리고 tgid(스레드 그룹 id)와 tid(스레드 id)를 가지고 있다.
    • 사용자 레벨에서 보면 tgid가 pid로, 커널 레벨에서 보면 tid가 pid로 보인다. 즉 커널 입장에서는 각각의 스레드가 다른 프로세스로 보이게 된다.

참고 : 코다의 Process vs Thread

profile
백엔드 개발 공부

0개의 댓글