프로세스와 스레드

2023. 4. 17. 22:37·스파르타 기술면접

✅프로세스(Process)

 💡 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스 운영체제로부터 시스템 자원을 할당받은 작업의 단위

특징

  • 프로세스는 독립된 메모리를 할당 받는다.
    • 프로세스가 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 이를 프로세스 주소 공간이라고 한다.
    • 프로세스 주소 공간 → Code, Data, Stack, Heap 으로 구성됨
      • Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
      • Data : 전역 변수, 정적 변수 등
      • Stack : 지역 변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
      • Heap : 동적 할당 시 사용 (new(), malloc() 등…)
    • 기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 갖는다.

 

➕멀티 프로세스

💡 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것

장점

  • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.

단점

  • 문맥 교환(Context Switching)에서의 오버헤드
    • 문맥 교환 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
  • 프로세스 간 통신 기법(IPC, InterProcess Comunication)
    • 프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스 사이의 변수를 공유할 수 없다
    • 따라서 IPC라는 방법을 사용해야 하며, 이는 어렵고 복잡한 통신 방법이다.

✅스레드(Thread)

 💡 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위

특징

  • 스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역을 따로 할당받는다.
  • 프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 사용.

 

➕멀티 스레드

💡 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것

장점

  • 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
  • 스레드 간 통신 시, Data, Heap 메모리 영역을 이용해 데이터를 주고 받으므로 통신 방법이 간단.
  • Context Switching 시 PCB 및 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠르다.

단점

  • 서로 다른 스레드가 Data, Heap 영역 등을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 즉, 자원 공유 동기화 문제가 발생한다.
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.

Thread-safe

  • 멀티스레드 환경에서 여러 스레드가 동시에 사용되어도 안전하다는 것을 말함
  • 즉, 여러 스레드가 프로세스의 공유 자원에 접근할 때, 공유 자원의 무결성을 보장하는 것을 말함

 


프로세스와 스레드의 차이점

  • 자원 공유 여부
    • 각각의 프로세스는 독립적인 메모리 영역을 가지고 있기 때문에 한 프로세스가 사용하는 메모리 영역은 다른 프로세스에서 직접 접근할 수 없다.
    • 스레드는 같은 프로세스 내에서 실행되기 때문에 프로세스 내의 자원을 모두 공유할 수 있다.
  • 프로세스 간 전환은 스레드 간 전환보다 느림
    • 스레드를 이용하여 멀티태스킹을 구현하는 것이 더 효율적 →but, 스레드 간 동기화와 같은 문제를 고려해야 가기 때문에 스레드를 사용하는 것이 더 복잡할 수 있다..
  •  

'스파르타 기술면접' 카테고리의 다른 글

절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?  (0) 2023.04.29
Stack과 Queue 그리고 Array와 Linked List 자료구조  (0) 2023.04.25
List / Set / MAp, HashMap  (0) 2023.04.16
Filter / Interceptor / AOP  (0) 2023.04.11
DI의 방식 중 필드 vs 생성자 주입 방식  (0) 2023.04.11
'스파르타 기술면접' 카테고리의 다른 글
  • 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?
  • Stack과 Queue 그리고 Array와 Linked List 자료구조
  • List / Set / MAp, HashMap
  • Filter / Interceptor / AOP
yeah구리
yeah구리
백엔드를 공부하는 초심자입니다.
  • yeah구리
    개발일지_헤맨만큼 내땅이다
    yeah구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 스파르타 부트캠프(spring) (75)
      • 스파르타 기술면접 (10)
      • 코딩연습 (0)
      • 항해 (10)
      • 개발일지 (4)
        • 개인 회고 (1)
        • 개발로그 (실무) (2)
      • 공부노트 (0)
      • 코딩테스트 (0)
        • 프로그래머스 (0)
        • 백준 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    X(Twitter) API #캐싱 #트러블슈팅 #개발
    비전공개발자 #개발로그 #커리어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeah구리
프로세스와 스레드
상단으로

티스토리툴바