Mulit Thread

임채환·2024년 9월 10일

Thread

목록 보기
5/6

Multi Thread

  • 프로그램 내에서 두 개 이상의 동작을 동시에 실행

    • CPU의 활동을 극대화
    • 두 개가 동작을 동시에 실행
  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유

    • 자원의 생성과 관리의 중복성 최소화
    • 수행 능력 향상

Mulit Thread의 장점

응답성

  • 프로그램 일부분이 중단이 되거나 긴 작업을 수행 하더라도 프로그램 수행이 지속적으로 유지되어 사용자에 대한 응답성이 증가합니다.
  • Multi Thread 환경에서는 에러 발생시 새로운 Thread를 생성하여 error를 극복합니다.

경제성

  • 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 자원과 시스템 공간을 효율적으로 활용할 수 있습니다.
  • 스레드 간 통신에서도 데이터를 주고받을 수 있으며, 프로세스 간의 Context switching과는 달리 스레드 간의 context switching은 캐시 메모리를 비울 필요가 없기 때문에 더 빠르게 동작 합니다.
  • 멀티프로세서의 활용
    • Mulit Core CPU 환경에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행 될 수 있으므로 병렬성이 증가합니다.

Multi Thread 단점

  • Context switching,동기화 등의 이유로 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드 보다 느릴 수 있습니다.

  • 공유자원을 서로 다른 스레드가 동시에 접근하는 경우,스레드 내에서는 Heep 영역을 공유하기 때문에 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정 할 수 있습니다.

  • 그래서 반드시 동기화 처리를 해야 합니다. 즉 동기화 비용이 발생합니다.

  • 멀티 스레드 환경은 개발 난도가 높습니다. 또한 자원 사용량도 많습니다.

스레드의 메모리 영역

  • 스택(Stack) 영역:스택은 각 스레드마다 독립적으로 할당됩니다. 즉, 스레드마다 고유한 스택 메모리 공간이 있으며, 이 스택에는 지역 변수와 메서드 호출 시의 인자들이 저장됩니다.
    스택 메모리는 각 스레드가 독립적으로 사용하는 메모리이므로, 다른 스레드와 데이터를 공유하지 않습니다. 따라서 스택에 저장된 변수는 다른 스레드가 접근할 수 없고, 스레드 간의 간섭이 발생하지 않습니다.
    힙(Heap) 영역:

  • 힙은 모든 스레드가 공유하는 메모리 공간입니다. 객체나 배열과 같은 인스턴스 데이터는 힙 영역에 할당되며, 이 데이터는 모든 스레드가 접근할 수 있습니다.
    힙 영역의 데이터는 공유 자원이 될 수 있으며, 여러 스레드가 동시에 접근할 수 있습니다. 이 경우, 스레드 간의 충돌(예: 엉뚱한 값을 읽어오거나 수정하는 문제)이 발생할 수 있습니다. 이를 방지하기 위해 동기화(Synchronization) 메커니즘이 필요합니다.

동기화 문제

  • 스레드가 동시에 힙 영역에 있는 같은 객체나 변수에 접근할 때, 데이터가 변경되거나 잘못된 값이 읽혀질 위험이 있습니다. 이런 문제를 "경쟁 조건(Race Condition)"이라고 합니다.
  • 두 스레드가 동시에 힙 영역의 같은 변수에 접근하여 값을 변경하는 경우, 그 결과는 예측할 수 없게 됩니다. 따라서 공유 자원에 대한 접근을 제어하기 위해 동기화(synchronization)가 필요합니다. 동기화는 한 번에 하나의 스레드만 특정 코드 블록이나 메서드에 접근할 수 있도록 하여, 데이터 일관성을 유지합니다.

0개의 댓글