문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 SMT (문단 편집) === [[스레드]]와 멀티스레딩 === SMT를 이해하려면 [[스레드]](Thread)와 멀티스레딩(Multi-Threading)부터 이해해야 이 문서의 내용을 이해할 수 있다. 프로그램이 실행될 때, 빠른 데이터 처리를 위해 스토리지에 저장된 프로그램의 일부가 메모리에 상주하게 되는데 실행 중인 프로그램을 [[프로세스]]라고 부른다. 과거에는 프로세스가 곧 작업의 단위로 동작했으나 하드웨어의 자원 소모량이 많다보니 작업 전환에 필요한 컨텍스트 스위치의 오버헤드가 너무 커서 비효율적인 문제가 발생하게 되었는데, 이 문제를 해결하기 위해 프로세스를 여러 개의 '스레드'라는 작은 단위들로 쪼개서 동작하여 오버헤드를 줄이고 효율성이 개선되었다. 스레드는 일의 처리 흐름 단위이며 스레드가 여러 개이므로 '멀티스레드' 또는 다중스레드라고 부르며, 이러한 작업으로 수행하는 동작이 '멀티스레딩'이다. 1950년대부터 이러한 개념이 정립되었으며, 수 십년이 지난 지금도 '작업의 최소 처리 단위'를 스레드 단위로 취급하고 있다. 참고로 컴퓨터에서의 작업은 여러 명령어(Instruction)들로 구성되며, 명령어의 실행은 사이클(클럭) 단위로 처리한다. 이에 대한 자세한 내용은 [[CPU]], [[마이크로아키텍처]], [[파이프라인]], [[슈퍼스칼라]] 문서 참조. 사람으로 따지면 덩치 큰 한 사람(프로세스)이 제대로 일 하려면 식량을 많이 제공해줘야 하고 여러 작업들을 감당하려면 메모해야 할 분량이 많지만, 덩치 작은 여러 사람(스레드)들은 덩치가 작은 대신 식량을 많이 제공할 필요 없고 여려 명이라 개인당 메모해야 할 분량도 적으면서 협업할 수 있는 것과 비슷한 관계라고 보면 된다. 강력한 효율성으로 작업의 최소 처리 단위로써 정착되어 있지만, 여러 작업 주체들이 분담해서 처리하기 때문에 하나의 작업 주체일 때보다 흐름을 추적하기 어려우므로 [[소프트웨어 개발자]]인 [[프로그래머]]가 이를 주의하면서 프로그래밍해야 한다는 단점이 있다. 잘못하면 [[레이스 컨디션]]이 발생해서 원하는 결과 값을 도출할 수 없거나 기능을 제대로 수행할 수 없게 되기 때문. 운영체제 시스템 프로그래머들은 이러한 문제점을 파악해서 운영체제를 개발할 때 시스템의 엉망진창을 최대한 예방하면서 안정적인 멀티스레딩이 되도록 [[프로세스 스케줄링]]을 연구하면서 개발했다. 특히 소프트웨어의 관점에서 싱글코어 싱글스레드 프로세서나 싱글코어 멀티스레드 프로세서나 모두 논리 스레드의 관점에서 보이므로 0번째 물리코어의 2Way SMT인 Siblling 스레드는 두개 모두 논리 스레드이며 여기서 한쪽이 완전한 Idle상태이면 0-0나 0-1에서 프로그램이 동작하는 성능의 차이는 없다. (구분이 무의미)저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기