프로세스와 쓰레드

유수민·2023년 8월 11일
1

지식창고

목록 보기
59/64

📌 프로세스

  • 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업의 단위ex) 자바.class → 엔터 → JVM 시작 : 자바 프로세스 시작!
    프로그램 : 일반적으로 하드 디스크 등에 저장되어 있는 실행 코드
  • 하나의 프로세스는 운영체제로부터 각각 독립된 메모리 영역 (code, data, stack, heap)을 할당받는다.
  • 한 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • JVM 기준, 기본적으로 32MB ~ 64MB의 물리 메모리 점유 프로세스를 이용해 하나의 작업을 동시에 수행하려고 여러개의 프로세스를 띄워 각각 메모리를 할당해야 한다면?
    → 쓰레드 등장 : 1MB 이내의 메모리 점유

쓰레드

  • 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위
  • 쓰레드는 각자 자신의 stack 영역을 보유한다.
  • 쓰레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다.
  • 프로세스 내에서 쓰레드들은 서로 주소 공간이나 자원들을 공유하며 실행할 수 있다.ex. 서로의 힙 메모리를 서로 읽고 쓸 수 있다.

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

멀티프로세스

  • 한 애플리케이션에 여러개의 프로세스를 구성하여, 각 프로세스가 하나의 작업을 처리한다.

  • 장점
    1) 안정성이 좋다
    2) 여러개의 자식 프로세스 중 하나에 문제가 생겨도, 다른 자식 프로세스에 영향이 확산되지 않는다
    ex) 크롬 브라우저에 여러개의 탭을 띄우고 여러 웹사이트 방문시 한 탭이 잘못되어도, 해당 탭만 이용못하고 다른 탭은 별 문제가 없다.
    3) 각 프로세스들이 독립적으로 동작하여 자원이 서로 다르게 할당 된다.

  • 단점
    1) 메모리 사용량이 많다.
    2) 프로세스간 자원 공유가 필요할시 IPC(Inter-Process Commnuication)를 사용IPC : 프로세스 사이의 어렵고 복잡한 통신 기법, 파이프, 소켓, 메세지큐 등을 이용
    3) context switching에 의한 성능 저하의 우려가 존재한다.
    -- CPU 메모리 검색(다음 프로세스 정보 불러오기)
    -- CPU 캐시 메모리 초기화
    -- 프로세스 상태 저장
    -- 등등..

멀티 쓰레드

  • 한 애플리케이션에 여러개의 쓰레드를 구성하여, 각 쓰레드가 하나의 작업을 처리한다. ex) 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리하도록 하는 행위 . 웹서버

  • 웹 브라우저의 단일 탭/창 내에서 브라우저 네트워크 처리, I/O 및 기타 작업을 관리하고 처리

  • 장점
    1) 자원 공유가 쉽다.
    2) 시스템의 자원 소모가 감소하므로 프로세스를 할당하는 것보다 쓰레드를 할당하는 것이 비용이 적다
    3) 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다-> 프로세스 간의 전환 속도보다 쓰레드 간의 전환 속도가 빠르다.
    4) 스레드가 프로세스보다 가벼움
    -- 데이터 용량
    -- 생성 및 종료
    5) 프로세스간 통신(IPC)를 사용하지 않고도 데이터 공유 가능
    6) 컨텍스트 스위칭 오버헤드 존재하지만 상대적으로 프로세스의 컨텍스트 스위칭 오버해드보다 훨씬 비용이 낮다
    -- 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만 교체
    7) 응답 시간이 빠르다

  • 단점
    1) 하나의 스레드에서 문제가 발생하면 다른 스레드들도 영향을 받아 전체 프로그램이 종료될 수 있다.
    2) 쓰레드풀을 이용해 잔여 쓰레드를 가져와서 종료를 방지할 수 있지만, 새로운 쓰레드 생성이나 놀고 있는 쓰레드 가져오는 것에 대한 추가 비용 발생
    3) 동기화 문제 발생 ( 공유 자원 )
    4) 데드락 문제 발생
    5) 그래도 context switching overhead 문제는 존재

profile
배우는 것이 즐겁다!

0개의 댓글