물리적 스레드 vs 논리적 스레드
※ 두 스레드를 구분할 때 물리적과 논리적이라는 단어는 제가 임의로 붙인 단어입니다. 하드웨어적으로 구현된 스레드와 소프트웨어적으로 구현된 스레드를 구분하기 위함입니다.
[물리적 스레드]
- 물리적 스레드를 알기 전에 먼저 코어가 무엇인지 알아봅시다.
- 코어 : CPU에 내장된 처리회로. 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛.
- CPU는 다수의 코어를 장착할 수 있습니다. 최근에 나오는 듀얼 코어(2코어), 쿼드 코어(4코어), 옥타 코어(8코어) 등이 그 개념입니다.
- 코어의 수가 증가할수록 CPU의 처리 속도는 빨라집니다. 싱글 코어에서 2번 해야될 연산을 듀얼 코어에서는 한번에 수행하여 완료할 수 있습니다. 다만, 코어가 증가할 수록 클럭(코어당 연산의 속도)가 낮아진다는 단점이 있습니다.
- 하지만 코어의 갯수가 많다 하더라도 실행하는 소프트웨어가 다중 코어 연산을 지원해야 합니다. 그렇지 않다면 쿼드 코어에서 실행하나 싱글 코어에서 실행하나 차이가 없을 것입니다.
- 코어의 개념을 알아봤으니 이제 물리적 스레드를 알아봅시다.
- 물리적 스레드 : 하나의 코어가 허용할 수 있는 스레드
- 과거에는 하나의 코어에 하나의 스레드로 데이터를 처리했습니다. 다시말해, 코어에서 동시에 실행 가능한(할당 가능한) 스레드 수가 1개였다는 의미입니다. 마치 1차선 도로와 같습니다.
- 인텔사에서는 스레드 하나로는 코어의 성능을 100%발휘할 수 없으니 여러 스레드를 동시에 적용시키자는 생각을 합니다.
- 그 결과 코어에서 2개 이상의 스레드를 적용하여 프로그램을 실행할 수 있는 하이퍼 스레딩 개념이 발생합니다.
- 컴퓨터 성능을 따질때 얘기하는 스레드가 바로 이것입니다. 1개의 코어의 2개의 스레드가 들어있다면 보통 2코어 4스레드, 4코어 8스레드 등으로 불립니다. 1개의 코어에서 2개의 스레드를 실행 가능하게 되는 것입니다.
- 이는 물리적 스레드이고 (통상적으로 우리가 생각하는)논리적 스레드 개념과는 다릅니다.
[논리적 스레드]
- 논리적 스레드는 물리적 스레드와 개념이 다릅니다
- 논리적 스레드 : 프로세스 내에서 실행되는 세부 작업의 단위. 프로세스 실행의 흐름.
- 논리적 스레드는 물리적 스레드와는 다르게 소프트웨어적으로 얼마든지 할당이 가능합니다.
- 운영체제가 스케쥴링을 할 때 동시에 실행 가능한 스레드 수(물리적 스레드)는 정해져 있습니다. 하지만 메모리가 허용하는 논리적 스레드 수는 얼마든지 많을 수 있습니다.
- 이들 중 운영체제에 의해 실행되지 않는 스레드는 잠들어 있을 수 있으며 운영체제는 이들 중 물리적 스레드가 허용 가능한 만큼의 스레드를 할당하여 동시에 실행시킵니다.
- 책에 비유하자면, 4코어 8스레드는 상/하권으로 분권된 책이 4세트(8권)있는 것과 같습니다. 이를 읽고 싶은 독자(논리적 스레드)는 수십 혹은 수백명이지만 도서관에서 빌릴 수 있는 사람은 최대 8명 입니다. 나머지는 책이 반납될때 까지 기다려야 합니다.
[결론]
- 다시말해, 논리적 스레드는 프로세스 처리의 세부 단위입니다. 프로그램에서 얼마든지 스레드를 할당할 수 있습니다. 하지만 이를 동시에 실행시키는 것은 코어의 몫입니다. 코어는 허용 가능한 갯수 만큼의 스레드를 깨워 실행시킵니다.
[참고 자료]
- https://kldp.org/node/154708
- http://movefast.tistory.com/43#recentEntries
- https://m.post.naver.com/viewer/postView.nhn?volumeNo=9140043&memberNo=10558726