멀티쓰레딩(Multi Thread)란?

하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행능력을 향상시키는 것을 멀티쓰레딩이라고 한다.

쉽게 얘기 하면 하나의 프로그램을 동시에 여러일을 수행할 수 있도록 해주는것

 

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

  1. 프로세스를 이용하여 동시에 처리하던 일을 쓰레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어든다.
  2. 쓰레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 힙 영역을 이용하여 데이터를 주고 받을 수 있다.
  3. 한번에 다양한일을 동시 다발적으로 실행이 가능하다.

멀티 프로세스와 멀티 쓰레드의 주요 차이

  • 멀티 프로세스 : 데이터,힙,스택 영역을 모두 비공유
  • 멀티 쓰레드 :  데이터 힙 은 공유 스택영역만 비공유한다.

멀티 쓰레딩의 문제점

멀티 프로세스 기반으로 프로그래밍을 할때는 프로세스 간의 공유하는 자원이 없기 때문에 동일 한 자원에 동시에 접근하는 일이 없지만 멀티 쓰레딩을 기반으로 프로그래밍을 할때는 동시 자원 접근을 신경써줘야한다.

그렇기 떄문에 동기화를 통해 작업 처리 순서를 컨트롤 하고 공유자원에 대한 접근을 컨트롤 해야한다.

하지만 이로 인해 병목 현상이 발생하여 성능이 저하될 가능성이 있다. 그래서 과도한 락(lock)으로 인한 병목 현상을 줄여야 한다.

공유 자원이 아닌 부분은 동기화 처리를 할필요가 없다.

불필요한 부분까지 동기화를 할경우 현재 쓰레드는 락(lock)을 획득한 쓰레드가 종료하기 전까지 대기해야한다.

(전체 성능에 영향이 생김)

동기화를 하고자 할때는 메소드 전체를 동기화 할것인지 특정 부분만 동기화 할것인지 고민 해야한다.

 

더보기

병목현상이란?

한 가지 자원 또는 작업이 다른 여러 작업들에 의해 제한을 받아 성능이 저하되는 현상

 

멀티 쓰레드 환경에서 중요한 것은 일을 고르게 분배하고, 효율적으로 굴러갈수있게 하는것이다.

 

 

'프로그래밍 > MultiThread Programing' 카테고리의 다른 글

4. Lock과 Deadlock  (0) 2024.07.11
3. 메모리 베리어  (0) 2024.07.11
2. 캐시 이론  (0) 2024.07.10