woowacourse-study/2022-modern-java-in-action

Thread 의 장점과 단점은 무엇일까?

Opened this issue · 1 comments

문제

자바 8부터 지원하는 람다 표현식을 이용하면 스레드 코드를 구현할 수 있다고 한다.
그렇다면 스레드의 장점과 단점은 무엇일까?

선정 배경

가끔 멀티 스레드 환경에서의 충돌을 고려해야된다는 말을 듣고는 했는데,
여러 스레드가 각자 다른 코드를 실행할 수 있다는 것에는 어떤 장점과 단점이 있을지 궁금해졌다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

스레드

CPU 이용의 기본 단위. 프로세스 내에서 실행되는 여러 흐름의 단위

멀티 프로세스

서버에서 서비스 요청이 들어오면, 프로세스는 그 요청을 수행하기 위해 별도의 프로세스를 생성하는 방식
Context Switching과정에서의 오버헤드와 프로세스 사이의 통신이 어렵고 자원적으로 낭비

멀티 스레드

대부분의 프로그램은 하나의 프로세스안에 여러개의 스레드로 구성해서 처리하는 방식을 사용
이를 멀티 스레딩이라고 함. 자원을 공유해서 효과적이고, 통신간 비용이 적음

장점

시스템 자원 소모 감소(자원의 효율성 증대) : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리

시스템 처리량 증가(처리 비용 감소) : 스레드 사이의 작업량이 작아 Context Switching이 빠름

간단한 통신 방법으로 인한 프로그램 응답 시간 단축 : 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적음

단점

스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있음

자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없음