땃지
ing
땃지
전체 방문자
오늘
어제
  • 분류 전체보기 (100)
    • 공부 (37)
      • Java (4)
      • Spring Boot (4)
      • 자료구조 (4)
      • CS (18)
      • JSP (6)
      • Git (1)
    • 문제 해결 (60)
      • 백준 (51)
      • 프로그래머스 (9)
    • 프로젝트 (3)
      • 당신의 안목 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Contact

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
땃지
프로세스와 스레드
공부/CS

프로세스와 스레드

2022. 10. 5. 16:38

프로그램

파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태,

코드가 적혀있는 파일,

어떤 작업을 위해 실행할 수 있는 파일


프로세스

프로그램이 어떤 일을 하고 있는 상태, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스

→ 여러 프로세스를 돌리는 작업은 동시적, 병렬적 혹은 이 둘의 혼합으로 이루어짐

  1. 동시성 : 프로세스 하나가 여러 작업을 조금씩 돌아가면서 진행
  2. 병렬성 : 프로세서 하나에 여러 개의 코어가 달려서 여러 작업을 동시에 수행

 

프로그램이 프로세스가 되면서 일어나는 일

  1. 프로세스가 필요로 하는 것이 메모리에 올라감
    • 메모리 영역Data 영역 : Static 변수 혹은 Global 변수Stack 영역 : 지역변수, 매개변수, 반환 값 등 일시적인 데이터
    • Heap 영역 : 동적 메모리 영역
    • Code 영역 : 실행 명령을 포함하는 코드들
  2. 프로세스에 대한 정보를 담고 있는 PCB 블럭 생성 
  • 준비상태 / 대기상태 큐 구현용 포인터
  • 프로세스 상태 등의 정보

 

프로세스의 실행

사람들은 유튜브, 인텔리제이, 카카오톡, 크롬 등 여러 개의 프로세스를 동시에 사용하고 싶어 한다.

하지만, 하나의 프로세스가 실행되기 위해 CPU를 점유하고 있을 때 다른 프로세스는 실행 상태에 있을 수가 없다.

→ 따라서 여러 프로세스를 사용하기 위해서는 프로세스들이 짧은 텀을 반복하면서 전환하며 실행되는데 이것을 컨텍스트 스위칭, 동시성이라고 한다.


스레드

한 프로세스 내에서 여러 갈래의 작업이 동시에 진행될 필요가 있는데 이런 갈래를 스레드라고 한다.

즉, 프로세스 내에서 실행되는 여러 흐름의 단위이며 프로세스의 특정한 수행 경로이다.

스레드는 경량화된 프로세스라고도 할 수 있는데, 이는 하나의 프로세스 안에 여러 개의 스레드가 있을 때 공유되는 자원이 있기 때문이다. 이 여러 개의 스레드들은 코드, 데이터, 힙 영역을 공통된 자원으로 사용하고 스택 영역만 각자 사용한다. 이렇게 공유되는 자원이 있기 때문에 컨텍스트 스위칭 시에 캐싱 적중률이 상승한다. 하지만 여러 개의 스레드가 하나의 자원에 동시 접근하면 에러 발생한다는 단점이 존재한다.


멀티 프로세스 vs. 멀티 스레드

멀티 프로세스와 멀티 스레드 모두 처리 방식의 일종이다.

어떤 어플리케이션에서 로그인 요청이 들어왔다고 가정해보자.

 

1. 멀티 프로세스

각각의 프로세스는 독립적이고 한 프로세스는 하나의 로그인만 처리 가능하다.

따라서 부모 프로세스가 fork()를 통해 자식 프로세스를 여러 개 만들어내서 요청을 처리한다.

이때 만들어지는 자식 프로세스는 부모 프로세스와 별개의 메모리 영역을 갖게 된다.

  • 장점
    • 연관성이 적어 하나의 프로세스가 죽어도 다른 프로세스에 영향을 없음
  • 단점
    1. 각각 독립된 메모리 영역을 가지고 있어 작업량이 많을 수록 오버헤드, 컨텍스트 스위칭 성능 저하 등의 문제 발생
    2. 프로세스 사이의 통신이 복잡

2. 멀티 스레드

앞서 말했듯 스레드는 한 프로세스 내에서 구분 지어진 실행 단위이다.

예를 들어, 인텔리제이를 사용할 때 테스트를 돌리며 코드를 수정하는 것과 같이 하나의 어플리케이션에서 작업 단위를 여러 개로 나누어 수행할 때 스레드가 각각의 작업을 담당하여 수행하게 된다.

  • 장점
    1. 자원의 효율적인 관리 가능
    2. 공유 자원으로 인해 데이터를 주고 받는 것이 간단해지고 자원 소모가 적음
    3. 컨텍스트 스위칭 성능 상승, 시스템 처리량 증가
  • 단점
    1. 프로그램 디버깅 까다로움
    2. 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향
    3. 전역 변수로 인한 동기화 문제 발생

성능적 측면에서 이점이 있지만 스레드 간의 긴밀한 연관성으로 인해 멀티 탭간의 영향이 적어야 할 때에는 멀티 프로세스의 사용이 더 유리하다.

 

 


References

- https://www.youtube.com/watch?v=1grtWKqTn50&list=PLE0hRBClSk5Lcgv3c-I3PH-1LGkv96oYN&index=39 

저작자표시 비영리 변경금지 (새창열림)
    '공부/CS' 카테고리의 다른 글
    • REST API
    • 객체지향 프로그래밍(OOP)
    • 쿠키, 세션, 캐시
    • HTTP 프로토콜, 요청 메서드 (GET, POST)
    땃지
    땃지

    티스토리툴바