[Process & Thread] 스레드, 멀티 스레드

2023. 5. 11. 16:16·CS/OS
728x90

1. 스레드

1) 스레드

  • 하나의 프로세스 내에서 실행되는 동작의 단위
  • 각 스레드는 프로세스의 스택 메모리를 제외한 나머지영역인 코드, 데이터, 힙 영역을 공유 
  • 프로세스 내에서 독립적인 기능을 수행하며 이는 독립적인 함수를 호출함을 의미하며 따라서 스택메모리가 별도로 필요
  • 스택 메모리가 별도로 필요하다면 스레드 별로 실행되고 있는 명령어의 위치 또한 다르므로 PC 레지스터도 각각 필요

 

2) 독립적인 스택 메모리

  • 함수를 호출하기 위해서 인자 전달, Return Address와 함수 내 지역변수 저장 등을 위한 독립적인 스택 메모리 공간 필요
  •  프로세스로부터 Stack memory 영역은 독립적으로 할당받고, Code, Data, Heap 영역은 공유

 

3) PC Register

  • 멀티 쓰레드에서는 각각의 쓰레드마다 PC Register를 가지고 있어야 함
  • 한 프로세스 내에서도 쓰레드끼리 context switch가 일어나게 되는데, PC Register에 code address가 저장되어 있어야 하기 때문

 

4) 프로세스 vs 스레드

  • 프로세스는 운영체제로부터 자원을 할당받아 실행 중인 프로그램의 인스턴스
  • 스레드는 프로세스로부터 자원을 할당받는 프로세스 내의 실행 단위
  • 스레드는 다른 스레드와 스택 영역을 제외한 메모리 영역을 공유해 통신 과정을 거칠 필요가 없어 효율적
  • 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되는 스레드가 빠름

 

2. 멀티 스레드

1) 멀티 스레드

  • 하나의 프로세스가 동시에 여러 개의 일을 수행할 수 있도록 해주는 것
  • 하나의 프로세스에서(실행된 하나의 프로그램) 여러 작업을 병렬로 처리하기 위헤서 멀티 쓰레드를 사용
  • 멀티 쓰레드에서는 한 프로세스 내에 여러 개의 thread
  • 각 쓰레드들은 Stack 메모리를 제외한 나머지 영역(Code, Data, Heap) 영역을 공유
  • ex) 유튜브 영상을 시청하면서, 좋아요 버튼을 누르는 독립적인 함수 호출

 

2) 멀티 프로세스와 멀티 스레드. ⭐️

  • 멀티프로세스
    • 문맥교환 시 멀티 프로세스의 경우 힙, 데이터, 코드 영역의 정보까지 바뀌므로 문맥교환 비용 높음
    • 많은 CPU 시간과 메모리 공간을 차지하며 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않음
    • 메모리 구분이 필요할때 사용
  • 멀티 스레드
    • 문맥교환 시 스택영역의 내용만 변경되면 되므로 문맥교환 비용 낮음
    • 메모리 공간과 시스템 자원 소모가 줄어듬
    • 프로세스간의 통신(IPC)보다 쓰레드간의 통신 비용이 적기 때문에 통신으로 인한 오버헤드가 적음
    • 자원을 공유하기 때문에 동기화 문제가 발생할 수 있고 하나의 스레드 장애가 여러 스레드의 장애로 이어질 위험 있음
    • 문맥 교환이 자주일어나고 데이터공유가 빈번하다면 사용

 

  멀티 프로세스 멀티 스레드
메모리 구분 각 프로세스는 서로 다른 메모리를 사용 메모리의 데이터 영역과 힙 영역은 모든 쓰레드가 같이 사용
Context
Switching
완전 다른 프로세스를 시작해야 하므로 느림 C 레지스터가 서로 공유하고 있는
메모리 내의 코드 영역만 왔다갔다 하면 되므로 빠름
안정성 하나의 프로세스는 다른 프로세스에 영향을 주지 않기 때문에
안정성 면에서 더 좋을 수 있음
다수의 쓰레드가 동시에 데이터나,힙 영역의 메모리에
접근하게 되면 동기화 문제가 발생할 수 있음
하나의 쓰레드 장애가 전체 쓰레드 장애를 초래할 수 있어
안정성이 떨어질 수 있음

 

더보기

참고

 

[OS] 운영체제 질문 - (프로세스,스레드,동기화 문제,교착상태,페이징,가상메모리)

질의응답 형식으로 면접하듯이 정리해봤습니다. 아무리 잘 아는 질문이라고 해도 막상 대답하려고 하면 어려운거 같습니다. 완벽히 아는게 아니라는걸 알려주는거 같기도합니다. 스스로 질문

onejunu.tistory.com

 

GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질

백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문,

github.com

 

GitHub - kjsu0209/Tech-Interview: 기술면접 대비 CS 질문 모음

기술면접 대비 CS 질문 모음. Contribute to kjsu0209/Tech-Interview development by creating an account on GitHub.

github.com

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'CS/OS' 카테고리의 다른 글
  • [Process & Thread] 교착상태(Deadlock)
  • [Process & Thread] Multi Process, Multi Thread 동기화 (Mutex, Semaphore)
  • [Process & Thread] 프로세스간 통신(IPC, 공유메모리, 메시지전달)
  • [Process & Thread] 프로세스, 멀티 프로세스
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    동적계획법
    최단거리
    플로이드워셜
    큐
    구현
    DFS
    월간코드챌린지
    그리디
    덱
    트리
    힙
    LIS
    파이썬
    DP
    재귀
    백준
    스택
    다익스트라
    프로그래머스
    최대공약수
    BFS
    Algorithm
    자료구조
    조합
    이분탐색
    그래프
    구간합
    최소신장트리
    정렬
    알고리즘
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[Process & Thread] 스레드, 멀티 스레드
상단으로

티스토리툴바