[Operate System] Thread

2022. 11. 18. 23:41CS/OS

Thread

 

스레드

 

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

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

 

프로세스 내부의 스레드

 

  • 스레드는 프로세스 내의 Code, Data, Heap 영역은 프로세스 내의 다른 스레드와 공유하고 임시 메모리 영역인 Stack만 따로 할당받는다.
  • 즉 기본적으로 처음부터 생성이 되는 static 변수, 메서드 등의 고정적으로 메모리에 할당이 되는 요소들을 제외한 각자의 값들은 각자의 stack에 담겨서 사용이 되는 것이다

 

Multi Thread

 

멀티 스레드

 

 

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

 

장점

 

  • 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다
  • 스레드 간 통신 시, Data, Heap 메모리 영역을 이용해 데이터를 주고받으므로 통신 방법이 간단하다.
    • 프로세스의 변수를 주고받는 IPC 같은 통신방법을 사용하지 않음
  • Context Switch를 할 경우 PCB 및 캐시 메모리를 비울 필요가 없기에 비용이 적게 든다
    • PCB의 경우 프로세스의 상태를 저장하고 차례가 다가오면 PCB 내부의 대기 중이던 프로세스를 호출하여 사용하는 것인데 프로세스 안에서 해당 스레드를 사용하여 프로세스의 문맥 교환이 일어나지 않으므로 사용할 일이 없다.
    • 멀티 프로세스의 문맥교환 과정에서는 캐시 메모리 초기 화등의 작업이 진행되고 이 과정에서 많은 처리시간이 소요가 된다. 

 

단점

 

  • 서로 다른 스레드끼리 프로세스 내부의 Data, Heap 영역 등을 공유하기에 A라는 스레드에서 작업 중이던 값을 B라는 스레드에서 접근할 시 원하는 값이 아닌 다른 값을 접근할 수 있다. → 자원 공유 동기화 문제 발생
  • 하나의 스레드에서 문제가 발생하면 전체 프로세스에서 영향을 받는다.

 

Thread - safe

 

  • 멀티스레드 환경에서 여러 스레드가 동시에 사용되어도 안전하다는 것을 의미
  • 여러 스레드가 프로세스의 공유자원(객체 && 변수)에 접근할 때 공유 자원의 무결성을 보장하는 것을 뜻함
    • 각 스레드에서 함수 수행의 결과가 올바르게 나와야 한다.

 

 

Thread-safe를 지키기 위한 조건

 

  • Re-entrancy / 재진입
    • 스레드 호출과 관계없이 프로그램의 실행을 완료할 수 있는 방식으로 코드를 작성
  • Thread-local storage / 스레드 로컬 저장소
    • 각 스레드마다 각 스레드에서만 접근 가능한 저장소들을 사용하여 공유자원을 지역변수화 
  • Immutable objects / 객체 불변성
    • 읽기 전용 데이터만 공유시켜 스레드 안전성을 올린다.
    • 변경을 해야하는 경우에는 기존 객체를 수정하는 대신 새 객체를 만드는 방식으로 구현
    • 함수형 프로그래밍의 특징
  • Mutual exclusion / 상호 배제
    • 공유 데이터에 하나의 스레드만 접근할 수 있도록 메커니즘 설계
  • Atomic operations
    • 다른 스레드에 의해 중단이 되지않도록 공유 데이터를 사용 시 원자성 연산을 사용하여 접근
      • 가장 작은 단위로 연산을 진행
      • 공유데이터는 다른 스레드가 액세스를 해도 항상 유효한 상태로 유지

 

 

 

Multi Thread vs Multi Process

 

https://skyriv312079.tistory.com/58

 

[Operating System] Ostep virtualization - process

Ostep 운영체제 아주 쉬운 세 가지 이야기 : 네이버 도서 (naver.com) 운영체제 아주 쉬운 세 가지 이야기 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com Operating Systems: Three Eas

skyriv312079.tistory.com

 

지난번에 정리한 프로세스 중 멀티 프로세스와 현제 멀티 스레드를 비교해보았다.

 

멀티 프로세스 멀티 스레드

하나의 프로그램을 여러개의 프로세스로 구성

하나의 프로그램을 여러 개의 스레드로 구성
프로세스 개별화로 다른 프로세스에 영향 x
적은 메모리

빠른 속도의 Context Switching


많은 메모리 공간, CPU 시간 차지

Context Switching시 많은 비용 발생

- IPC / 캐쉬메모리 초기화 등의 작업시간 증가 


오류로 인해 하나의 스레드 종료 시 전체 스레드 종료

디버깅의 어려움

자원 공유의 문제 / 설계의 중요성

- thread safe를 유의하기

 

Reference

 

스레드 안전성 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

Thread safety - Wikipedia

Thread safety is a computer programming concept applicable to multi-threaded code. Thread-safe code only manipulates shared data structures in a manner that ensures that all threads behave properly and fulfill their design specifications without unintended

en.wikipedia.org