개발놀이터

(궁금증 해소) CPU의 스레드와 자바의 스레드는 과연 같은 의미일까? 다른 의미일까? 본문

Java

(궁금증 해소) CPU의 스레드와 자바의 스레드는 과연 같은 의미일까? 다른 의미일까?

마늘냄새폴폴 2022. 1. 10. 20:22

스레드에 대해 공부하다 보니 문득 궁금증이 생겼다.

https://coding-review.tistory.com/90

 

스레드와 멀티스레드

스레드 스레드를 알기전에 우리는 프로세스에 대해서 알아야한다. 프로세스는 무엇인가? 프로레스란 단순히 실행중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에

coding-review.tistory.com

 

생각해보니 우리는 스레드란 말을 어디선가 들어봤다. 바로 CPU의 코어와 스레드이다. 자바의 스레드와 CPU의 스레드는 같은의미일까? 다른의미일까?

 

글에 들어가기 앞서 CPU의 스레드를 하드웨어 스레드 자바같은 언어가 지원하는 스레드를 소프트웨어 스레드라 칭하겠다.

 

하드웨어 스레드

하드웨어 스레드를 설명하기 전에 CPU의 코어를 먼저 알아보자

 

CPU는 Central Procession Unit 이라는 말처럼, 컴퓨터의 뇌 역할을 하는 하드웨어이다. CPU안에 물리적인 계산을 실제로 진행하는 유닛을 코어(Core) 라고 한다.

 

CPU하나에 코어는 하나일까? 하나의 CPU에 하나만 있는 것은 아니다. 실제로 CPU는 듀얼코어 (2Core), 쿼드코어 (4Core), 옥타코어 (8Core)를 지원하는 것이 일반적이고 최상위 CPU 중에선 16코어도 존재한다. 즉, 하나의 CPU가 여러 계산을 동시에 병렬적으로 할 수 있는 여력이 늘어간다는 것이다.

 

그럼 하드웨어 스레드는 뭘까? 보통 컴퓨터 부품에 관심이 좀 있는 사람이거나 CPU를 한번이라도 들어본 사람이라면 이런 말을 들어봤을 것이다. 4코어8스레드 8코어16스레드 16코어32스레드 이때 스레드가 바로 하드웨어 스레드이다.

 

하드웨어 스레드는 OS가 스케쥴링 할 수 잇는 최소 단위의 일의 모음이다. 1코어에 1스레드를 지원하는게 기본이지만 요즘엔 1코어에 2스레드가 일반적이다. 

 

 

소프트웨어 스레드

2코어4스레드를 예로 들어서 설명해보겠다. 실제로 한번에 수행할 수 있는 능력은 네개가 최대이다. 하지만 자바에서 Executors의 newFixedThreadPool메서드를 사용하면 스레드 개수를 지정할 수 있다. 이때의 스레드는 소프트웨어 스레드이다. 

 

이 스레드는 소프트웨어 상에서 병렬적으로 일을 나누고 일을 할당할 때 쓰인다. 이 스레드가 그대로 하드웨어 스레드에 올라가서 사용된다. 즉, 소프트웨어 스레드가 100개 있다고 하더라도 동시에 실행될 수 있는 스레드는 하드웨어 스레드 개수와 같다. 2코어4스레드라면 동시에 네개의 스레드가 실행이 가능하다.

 

예를 들어서 도서관에 책이 있는데 이 책은 100명의 사람에게 빌려줄 수 있는 책이다. 하지만 한번에 읽을 수 있는 사람은 4명밖에 없는 것이다. 그럼 나머지 96명은 어떻게 하고있을까? 실제로도 책을 네명밖에 못읽기 때문에 96명은 자신의 차례를 기다리는 수밖에 없다. 

'Java' 카테고리의 다른 글

JVM (Java Virtual Machine)  (0) 2022.07.14
추상클래스와 인터페이스  (0) 2022.07.05
스레드와 멀티스레드  (0) 2022.01.10
자바 람다식에 대한 고찰  (0) 2021.09.23
자바 Optional  (0) 2021.09.23