멀티 스레드

paduck·2023년 3월 23일
0

CS/운영체제

목록 보기
1/2

멀티 스레드(Multi-thread)

하나의 프로세스 내에서 여러 개의 스레드(Thread)가 동시에 작업하는 것

  • 스레드는 프로세스 내의 실행 흐름을 담당하는 작은 단위이며,
    프로세스 내의 메모리 등의 자원을 공유하여 작업을 수행한다.

멀티 스레드의 장점

  1. 하나의 CPU에서 여러 개의 작업을 동시에 처리함으로써, 작업 처리 속도가 높다
  2. 스레드들은 하나의 프로세스 내에서 동작하기 때문에, 프로세스 내의 데이터를 서로 공유할 수 있어 자원 활용도가 높다
  3. 멀티 스레드를 이용하면 프로그램의 구조가 단순해지고, 각각의 스레드들이 서로 독립적으로 작동하게 되어 코드의 유지보수가 쉬워진다

멀티 스레드의 단점

  1. 스레드들이 동시에 작동하기 때문에 데이터 충돌, 데드락 등의 문제가 발생해 데이터 동기화 오류가 발생할 수 있다.
  2. 마찬가지로 스레드가 동시에 작동하여 추가적인 메모리와 CPU 자원이 필요해 오버헤드가 발생할 수 있다.
  3. 위와 같은 이유로 디버깅의 어려움이 있다.

멀티 스레드의 단점을 해결하기 위해 사용할 수 있는 방법과 멀티 스레드를 사용하는 시점과 방법에 대해 설명드리겠습니다.

멀티 스레드의 단점 극복하기

  1. 동기화 문제
  • 뮤텍스(Mutex)와 세마포어(Semaphore)를 이용한 동기화
  • Critical Section을 이용한 동기화
  • 교착상태(Deadlock)를 방지하기 위한 방법
    - 자원 할당 순서 결정
  1. 오버헤드
  • 스레드 풀(Thread Pool)을 이용하여 스레드의 생성과 제거를 줄임
  • CPU 바운드(CPU Bound) 작업이 많은 경우, 멀티 프로세싱(Multi-Processing)을 이용하여 여러 개의 프로세서를 사용
  1. 디버깅
  • 스레드 세이프(Thread Safe)한 코드 작성
  • IDE를 통한 스레드 디버깅

그렇다면 멀티 스레드는 언제?

계산, 암호화 와 같은 CPU Bound 작업의 경우 멀티 스레드 사용이 효과적이다
그렇기에, 파일 입출력, 네트워크 통신과 같은 I/O Bound인 경우에는 멀티 스레드보다는 비동기 처리가 효과적이다

결국, 멀티 스레드를 사용할 때는 동기화 문제를 주의해야 하며, 스레드 세이프한 코드 작성과 디버깅 도구 사용 등을 통해 안정성을 높이는 것이 중요하다고 한다. 또한, 작업의 특성에 따라 적절한 멀티 스레드 방법을 선택하여 사용해야 한다.

profile
끈질기게 들러붙기

0개의 댓글