문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 스레드 (문단 편집) === 컴퓨터 실행 체계의 단위 === {{{#!syntax cpp #include // pthread_t, pthread_create(), pthread_join() ... void* func0000(void* args0); void* func0001(void* args1); int main(void){ pthread_t tid[2]; int args[2]; int status; pthread_create(&tid[0], NULL, func0000, (void*)&args[0]); pthread_create(&tid[1], NULL, func0001, (void*)&args[1]); pthread_join(tid[0], (void**)&status); pthread_join(tid[1], (void**)&status); return 0; } }}} ▲ POSIX Thread (pthread)를 사용하여 두 개의 스레드를 만들고, 각각의 스레드가 서로 다른 함수를 실행하게 만드는 프로그램. 최신 [[운영체제]]의 [[필수요소]] 중 하나. 프로세스보다도 작은 실행 흐름의 최소 단위이다. 예전에는 [[프로그램]]을 실행하는 흐름이 오로지 프로세스뿐이었으나, 소프트웨어가 진보하면서 하나의 프로그램에서 복잡한 동시 작업을 요구하기 시작하였다. 이를 위해서는 하나의 프로그램이 여러개의 프로세스를 만들어야 했는데 프로세스 특성상 하나의 프로그램이 이러한 동시 작업을 수월하게 할 수가 없었다.[* 프로세스는 서로의 메모리가 별도로 관리되므로 생성시에 필요한 정보를 죄다 복사해 줘야 하다보니 생성 및 제거가 느리고 프로세스간 정보 교환이 어려운 데다 상당량의 메모리를 중복해서 지녀야 한다. 또한 숫자가 늘어날 수록 Context Switching 부담이 상당해진다.] 그래서 프로세스보다 더 작은 실행 단위 개념이 만들어지게 되는데 이것이 스레드이다. 하나의 프로세스에서 여러개의 스레드가 메모리를 공유하여 작동할 수 있으며, 그래서 생성과 속도가 빠르고, 적은 메모리를 점유하며, 정보 교환이 쉽고 Context Switching[* 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업] 부하가 적지만 그 대가로 자원 선점과 동기화 문제를 얻게 되었다. 대다수 OS의 [[스케줄러]]는 스레드를 최소 단위로 하여 작동한다. CPU 사양 상에서 [[멀티코어 프로세서|4 코어 8 스레드]] 등으로 언급되는 스레드는 위에서 언급한 것과 같으나 단위로서의 뉘앙스가 더 강하다. 4개의 코어로 최대 8개의 작업을 동시 처리할 수 있다든지. 일반적으로 하나의 코어는 한번에 하나씩의 작업만 처리할 수 있지만 [[SMT]][* 인텔의 하이퍼 스레딩이 이것의 일종.]를 통해 하나의 코어가 어느 정도 다중 처리 능력을 가지게 할 수 있으며 이럴 경우 물리적 코어 개수와 처리 가능한 스레드의 숫자가 다르게 된다. '''사실 멀티코어 CPU 이전부터 존재하던 개념이었다.''' 문서를 작업하고 있는데 데스크탑 시계가 안 가거나 느리게 가면 큰일나기 때문이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기