강의 메모 - 싱글스레드 & 멀티스레드 #
개요 #
- 프로세스는 오직 한개의 스레드로만 구성하는 싱글 스레드 프로세스와 하나 이상의 스레드로 구성하는 멀티 스레드 프로세스로 구분할 수 있다
- 작업 처리에 있어서 단일스레드와 멀티 스레드의 선택 기준은 어떤 방식이 자원을 더 효율적으로 사용하고 성능처리에 유리한가 하는 점이다
- 현대 CPU 는 대부분 멀티코어를 지원하기 때문에 병렬적 성능 및 동시적 자원 사용 관점에서는 싱글 스레드보다 멀티스레드 기반 프로그래밍이 유리한 점이 많다
- 싱글 스레드 혹은 아주 적은 스레드를 활용한 비동기 논블럭킹 프로그래밍은 많은 수의 멀티 스레드 기반 프로그래밍 보다 더 좋은 성능과 응답성을 보여줄 수 있다
단일스레드 #
장점 #
- 문맥교환이 없다
- 동기화 이슈가 없다
- 자원 비용이 적다
- 프로그래밍 난이도가 낮다
단점 #
- CPU 멀티코어 활용 못함
- 순차적 실행으로 응답성 및 전체 처리량이 낮다
- I/O 처리 시 CPU 가 낭비된다
- 스레드에 오류가 발생하면 프로그램이 종료된다
멀티스레드 #
장점 #
- 동시성으로 사용자의 응답성 향상
- CPU 멀티코어의 병렬성으로 성능 향상
- CPU 낭비 없는 자원의 효율적인 사용
- 한 스레드 오류는 다른 스레드에 영향이 없다
단점 #
- 빈번한 문맥교환으로 성능이 저하 된다
- 스레드 간 동기화 이슈가 발생한다
- 스레드 생성 비용이 작지 않다
- 프로그래밍 난이도가 높다
멀티스레딩과 동시성 #
- CPU 의 동시적 작업 처리는 CPU 코어 개수보다 스레드의 개수가 많을 때 즉 , 멀티스레딩 환경에서 자원을 효율적으로 배분하고 사용하기 위해 설계된 방식이다
- 같은 프로그램 안에서 실행되는 여러 스레드가 읽기 및 쓰기 작업을 같은 메모리 영역에서 동시에 실행할 경우 동시성 문제가 대두된다
- 동시성 문제라 함은 하나의 스레드가 어떤 메모리 영역의 데이터를 쓰고 있는데 또 다른 스레드가 같은 메모리 영역의 데이터를 읽거나 쓸 경우 발생할 수 있는 문제이다
- 동시성 문제는 싱글스레드에서는 절대 발생하지 않으며 멀티 스레드를 운용하는 어플리케이션에서 나타나는 현상이다
a는 여러 쓰레드가 접근 가능하다. “멀티 스레딩 환경에서 공유 자원을 선점하기 위해 발생 하는 스레드 간의 동시성 문제는 자바 프로그램 개발에 있어서 반드시 숙지하고 이해해야 할 중요한 주제이다. 그리고 이 주제는 방대하고 복잡하며 난해하다.”