Home [OS] 스레드와 멀티스레드
Post
Cancel

[OS] 스레드와 멀티스레드

3월 2주차 스터디 발표 자료📖
오늘은 스레드와 멀티스레드에 대해 알아보고자합니다!!
🔥먼저 스레드의 개념을 잡고 자바에선 어떻게 사용하는지 알아봅시당!!

스레드


  • 스레드란 프로세스 내에서 실제로 작업을 수행하는 주체이다.
  • 모든 프로세스에는 한 개 이상의 스레드가 존재한다.
  • 자바에서는 JVM에 의해 관리된다.
  • 스레드는 프로세스 내에서 stack 영역만 따로 할당받고 Code,Data,Heap 영역은 공유한다.
  • 스레드는 경량화된 프로세스라고 불린다.

단일 스레드와 멀티 스레드


단일 스레드?

  • 하나의 프로세스에서 하나의 스레드가 실행되는 것
  • 공유자원의 접근으로 인한 동기화 문제를 신경쓰지 않아도된다.
  • Context Switching 작업이 요구되지 않는다.
  • 단순한 계산 작업이라면 멀티 스레드보다 싱글 스레드로 프로그래밍 하는 것이 효율적이다.
    • 컨텍스트 스위칭 작업으로 인해 단일 스레드보다 작업 시간이 더 오래걸릴 수 있다.

단일 스레드의 단점?

  • 연산량이 많은 작업을 하는 경우 그 작업이 완료되어야 다른 작업을 수행할 수 있다.
  • 에러 발생 시, 해당 작업을 처리할 다른 스레드가 존재하지 않으므로 작업이 중단될 수 있다.

멀티 스레드?

  • 두 개 이상의 스레드를 가진 프로세스
  • 멀티스레드란 하나의 프로세스에서 여러 개의 작업을 하도록 해주는 기능

멀티 스레드를 사용하는 이유는?

  • 자원을 효율적으로 사용할 수 있다.
    • 멀티 스레드는 메모리 영역을 공유하기 때문에 시스템 자원을 효율적으로 사용할 수 있다.
  • 쓰레드 간의 통신 방법이 간단하다.
    • 메모리 영역을 공유하기 때문에 별도의 자원을 이용하는 것이 아니라 Data 영역과 Heap 영역을 통해 데이터 교환이 가능하다.
  • 쓰레드의 생성 및 컨텍스트 스위칭은 프로세스보다 빠르다.
    • 프로세스 문맥교환과는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
  • 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있으므로 사용자와의 응답성이 좋아진다.

멀티 스레드의 단점?

  1. 임계 영역 (Critical Section)
    • 전역 변수에 독립적인 스레드 A,B가 동시에 접근하면 어떻게 될까? 임계 영역 예시
      • 즉, 동시에 접근은 가능하나 연산이 늦게 끝난 스레드의 결과값으로 덮어 씌워져 버릴 것이다..
      • 해결 방법?
        동기화 작업을 통해 작업 처리 순서와 공유자원에 대한 접근을 컨트롤 한다. 하지만 이러한 동기화 작업으로 인해 병목 현상, 데드락이 발생할 수 있다.
  2. 병목 현상
    • 어떤 시스템 내 데이터 처리 속도가 지연 됨으로 다음에 오는 데이터 처리가 지연되는 현상
      • [예시]
        스레드 A가 공유자원인 1번 자원을 사용하기 위해 Lock을 걸었기 때문에 B 스레드는 1번 자원을 사용하기 위해 A 스레드의 작업이 끝날 때 까지 기다려야한다.
    • 이러한 현상을 방지하기 위해 과도한 Lock의 사용을 줄여야한다. 공유자원이 아닌 곳까지 동기화 처리를 하고있는지 점검해야한다.
  3. 교착 상태(Dead Lock)
    • 두 개 이상의 스레드가 서로의 작업이 끝나기만을 기다리며 작업을 더 이상 진행하지 못하는 상태

단일 스레드와 멀티 스레드의 메모리 구조?

스레드 메모리 구조

  • 스레드는 프로세스와 달리 Code, Data, Heap 영역을 공유한다.
  • 스레드는 Code 영역을 공유하기 때문에 한 프로세스 내부의 스레드들은 프로세스가 가지고 있는 함수를 모두 호출할 수 있다.
  • 스레드는 Data, Heap 영역을 공유하기 때문에 IPC 없이 Heap 영역을 통해 쓰레드 간의 통신이 가능하다.
    • IPC? 프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법
This post is licensed under CC BY 4.0 by the author.