020 Single Multi Thread

강의 메모 - 싱글스레드 & 멀티스레드 #

개요 #

  • 프로세스는 오직 한개의 스레드로만 구성하는 싱글 스레드 프로세스와 하나 이상의 스레드로 구성하는 멀티 스레드 프로세스로 구분할 수 있다
  • 작업 처리에 있어서 단일스레드와 멀티 스레드의 선택 기준은 어떤 방식이 자원을 더 효율적으로 사용하고 성능처리에 유리한가 하는 점이다
  • 현대 CPU 는 대부분 멀티코어를 지원하기 때문에 병렬적 성능 및 동시적 자원 사용 관점에서는 싱글 스레드보다 멀티스레드 기반 프로그래밍이 유리한 점이 많다
  • 싱글 스레드 혹은 아주 적은 스레드를 활용한 비동기 논블럭킹 프로그래밍은 많은 수의 멀티 스레드 기반 프로그래밍 보다 더 좋은 성능과 응답성을 보여줄 수 있다

단일스레드 #

img.png

장점 #

  • 문맥교환이 없다
  • 동기화 이슈가 없다
  • 자원 비용이 적다
  • 프로그래밍 난이도가 낮다

단점 #

  • CPU 멀티코어 활용 못함 
  • 순차적 실행으로 응답성 및 전체 처리량이 낮다
  • I/O 처리 시 CPU 가 낭비된다 
  • 스레드에 오류가 발생하면 프로그램이 종료된다

멀티스레드 #

img_1.png

장점 #

  • 동시성으로 사용자의 응답성 향상
  • CPU 멀티코어의 병렬성으로 성능 향상
  • CPU 낭비 없는 자원의 효율적인 사용 
  • 한 스레드 오류는 다른 스레드에 영향이 없다 

단점 #

  • 빈번한 문맥교환으로 성능이 저하 된다 
  • 스레드 간 동기화 이슈가 발생한다
  • 스레드 생성 비용이 작지 않다
  • 프로그래밍 난이도가 높다 

멀티스레딩과 동시성 #

  • CPU 의 동시적 작업 처리는 CPU 코어 개수보다 스레드의 개수가 많을 때 즉 , 멀티스레딩 환경에서 자원을 효율적으로 배분하고 사용하기 위해 설계된 방식이다
  • 같은 프로그램 안에서 실행되는 여러 스레드가 읽기 및 쓰기 작업을 같은 메모리 영역에서 동시에 실행할 경우 동시성 문제가 대두된다
  • 동시성 문제라 함은 하나의 스레드가 어떤 메모리 영역의 데이터를 쓰고 있는데 또 다른 스레드가 같은 메모리 영역의 데이터를 읽거나 쓸 경우 발생할 수 있는 문제이다
  • 동시성 문제는 싱글스레드에서는 절대 발생하지 않으며 멀티 스레드를 운용하는 어플리케이션에서 나타나는 현상이다

img_2.png a는 여러 쓰레드가 접근 가능하다. “멀티 스레딩 환경에서 공유 자원을 선점하기 위해 발생 하는 스레드 간의 동시성 문제는 자바 프로그램 개발에 있어서 반드시 숙지하고 이해해야 할 중요한 주제이다. 그리고 이 주제는 방대하고 복잡하며 난해하다.”