멀티쓰레딩 모델

주연·2024년 7월 1일

1. Many-to-One 모델

자바 초창기 버전, 복수의 유저 스레드가 하나의 os 스레드와 연결된 구조

장점
1. 컨텍스트 스위칭이 빠르다
유저 스레드 간 컨텍스트 스위칭 과정에 커널 개입하지 않음

  1. os 레벨에서 데이터 경합이 발생할 가능성이 적다.
    os 레벨에서 단 하나의 작업만 실행될 수 있기 때문

단점
1. 멀티코어의 이점을 누릴 수 없다.
os 레벨에서 단 하나의 작업만 실행될 수 있기 때문

  1. 특정 유저 스레드에서 블록킹 시스템 콜을 호출할 경우, os 스레드가 블록되어 그와 연결된 모든 유저 스레드들이 블록킹된다.

2. One-to-One 모델

자바8과 자바 11 등 대부분의 서비스에서 사용 중인 자바 버전들, 각 유저 스레드마다 독립된 os 스레드 하나와 연결되는 구조

장점
1. 멀티코어의 이점을 볼 수 있음
유저 스레드의 개수만큼 os 스레드가 존재해 서로 다른 유저 스레드는 반드시 독립적인 os스레드에서 실행되기 때문

  1. 특정 유저 스레드에서 블록킹 시스템 콜을 호출할 경우, 다른 유저 스레드에 영향을 미치지 않음

단점
1. os레벨에서 데이터 경함이 발생할 가능성이 높음
하나의 프로세스 내에서 복수의 os 스레드가 메모리, 파일 등 동일한 자원을 공유하기 때문

  1. 성능 저하
    os 스레드의 개수가 늘어날수록 프로세스가 무거워지며 어느 지점부터는 리소스 사용량 과하게 증가하여 성능 저하됨.

-> 스레드풀을 만들어서 제한된 개수의 os 스레드를 최대한 효율적으로 사용

  1. Many-to-Many
    고 언어의 고루틴, 자바21의 가상 스레드에서 지원

위의 모델들의 장점을 합친 이상적인 멀티스레딩 모델

장점
1. 멀티코어의 이점 누림
2. 특정 os 스레드가 블록되어도 나머지 os 스레드들은 그대로 활용할 수 있음.
3. 가벼운 무게의 유저 스레드를 만들어도 프로세스에 무리가지 않음. 컨텍스트 스위칭은 유저 레벨에서 발생해 굉장히 빠름

단점
1. 구현하기 힘듦.

참고
https://bugoverdose.github.io/computer-science/multi-threading-models/

profile
공부 기록

0개의 댓글