본문 바로가기
IT/Knowledge

Multi-thread

by 성준하이 2023. 8. 10.
반응형

쓰레드에 대해서 사용을 할때 멀티 쓰레드에 대한 내용을 다뤄보려고 한다.

 

Thread 에 대한 기본적인 내용은 아래 참고 포스팅 참고 바란다.

 

멀티 쓰레딩이란 아래 그림을 보면 이해가 쉬울 것이다.

  • 왼쪽 싱글 스레드에 비해 오른쪽 여러개의 멀티 쓰레드는 병행 처리를 하면서 스레드의 부하를 줄여주기도 하고 경우에 따라서는 더 빠른 속도를 나타내기도 한다.

장점

  • 응답성
    • 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속 되어 사용자에 대한 응답성이 증가
      ex) 멀티 스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에서 사용자와 상호작용 가능
  • 경제성
    • 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어듬
    • 스레드 간 통신이 필요한 경우에도 쉽게 데이터를 주고 받을 수 있으며, 프로세스의 context switching과 달리 스레드 간의 context switching은 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
  • 멀티프로세서 활용
    • 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가

단점

  • 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 코드 블록. 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 주기적인 동기화를 해주거나 자바에서는 singleton이 아닌 다른 방식으로 사용해야한다.
  • 동기화를 통해 스레드의 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤할 수 있다. (Java에서 synchronized 키워드) 그러나 불필요한 부분까지 동기화를 하는 경우, 과도한 lock으로 인해 병목 현상을 발생시켜 성능이 저하될 가능성이 높기 때문에 주의해야 한다. 동기화 방법에는 뮤텍스와 세마포어가 있다. (참고 포스팅 참고)
  • context switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느리다.

참고 포스팅

https://thenicesj.tistory.com/492

 

Thread란? (process비교)

먼저 thread 에 알기 전보다 알아야할 것이 있다. 그는 바로 프로세스라는것이고 프로세스와 thread 에 차이를 알아본다. 프로세스(process)란? 프로세스(process)란 단순히 실행 중인 프로그램(program)이

thenicesj.tistory.com

https://thenicesj.tistory.com/356

 

Mutex / Semaphore ( 뮤택스 와 세마포어 )

동기화를 위해 이용되는 도구인 뮤택스와 세마포어에 대해서 정리를 해볼 것이다. Mutex (뮤택스) 자원에 대한 접근을 동기화 하기 위해 사용되는 상호 배제 기술이다. 공유된 자원의 데이터 혹은

thenicesj.tistory.com

 

반응형

'IT > Knowledge' 카테고리의 다른 글

의사코드(pseudocode)란?  (49) 2023.08.27
Daemon의 방식  (48) 2023.08.25
CircuitBreaker 란?  (54) 2023.08.08
전자정부 프레임워크란?  (48) 2023.08.05
썬더볼트와 USB, 그리고 USB 4.0  (45) 2023.08.01

댓글