출처 : https://en.wikipedia.org/wiki/Thread_(computing) A process with two threads of execution, running on one
disk에 있는 프로그램이 cpu가 연산, 즉, 컴파일하여 메모리의 로드된 동적인 상태. 비슷한 말들로 Task, Routine, Procedure가 있다.
그럼 Program은? disk에 있는 아직 실행되기 전의 정적인 상태
그 프로세스 안에 있는 cpu의 작업 단위이며, 프로세스의 실행흐름이다.
프로세스의 실행흐름이라? 한마디로 오퍼레이션, 명령어의 집합 자체
이다.
프로세스 안에는 이런 흐름들이 최소 1개는 가지고 있다.
정리하면, 프로세스는 실행 환경과 자원을 제공하는 컨테이너 역할을 하고, 스레드는 실제 CPU를 사용해서 코드를 하나하나 실행하는 것이다.
이 둘의 가장 큰차이는 "메모리 공유"이다.
process는 os에게 독립적인 메모리공간을 할당받는다.
반대로 Thread는 stack을 제외 나머지 메모리공간(static영역, heap영역)을 공유해서 context switching
의 overhead가 적다.
⚠️ 하지만 장점이 있으면 단점도 있는 법!
메모리를 공유
하기 때문에 어플리케이션이 돌아갈 때 동시성, 동기화 이슈
가 생겨 연산에 대한 작업 단위 결과가 예상과 다르게 진행될 수가 있다.
Q. 왜 스레드는 stack만 독립적인 메모리 공간을 가지고 있는가?
스택은 함수를 호출할시 사용한 파라미터, PC값(복귀주소값), 지역변수가 저장되는데 쓰레드함수가 호출하고 그 역할이 끝나면 복귀하기 위해 stack을 독립적으로 가져야만 한다
듀얼코어, 쿼드코어, 헥사코어, 옥타코어 등등 CPU의 core는 CPU의 핵심기능을 담당하고 있다.
그 core와 Thread의 관계는 이렇다.
코어는 CPU를 물리적으로 구별한것이고, 쓰레드는 CPU를 논리적으로 구별한 것이다.
일반적으로는, 코어 갯수와 CPU갯수가 같지만
인텔같은경우 하이퍼쓰레딩(Hyper Threading)
기술로
코어의 갯수를 또 반으로 쪼개는(!!!!) 기술이 이용됩니다. 일반적으로 i3같으데서 이용된다.
이런 기술이 적용되면, 코어갯수의 두배가 쓰레드가 된다.
예를 들어, 듀얼코어(2개)에 하이퍼쓰레딩이 적용되면 4쓰레드가 되는 경우인 것이다.
코어 많을수록 게임이 빨라진다거나, 작업이 빨라지는것은 반은 사실이고 반은 거짓입니다.
대부분 게임의 경우, 듀얼코어나 쿼드코어밖에 지원이 안됩니다
특히 오래된 게임일수록, 코어수보단 클럭수를 많이 따지죠.
물론 최근 게임의 경우에는, 옥타코어까지 지원하는 경우도 더러 있습니다.
그렇기 때문에, 자신이 원하는 게임을 위해 CPU를 구매한다고 할때 단순히 코어, 쓰레드 숫자가 높은걸 산다기보다 그 게임이 CPU를 정확히 적합한지 확인해보시고 구매하는것도 현명한 선택이라고 생각됩니다.