위키득계정 ↗
기술

스레드 (컴퓨팅)

스레드 (컴퓨팅)기술
영문명
Thread
사용 분야
운영체제와 동시 실행
일반적인 공유 자원
프로세스의 주소 공간
개별 실행 상태
레지스터 문맥과 스택 등
스레드는 프로그램 안에서 명령을 실행하는 흐름의 단위다. 같은 프로세스의 스레드들은 보통 주소 공간과 여러 자원을 공유하며, 각각의 실행 위치와 스택 등을 유지한다.

실행 흐름을 나누기

한 프로그램이 입력을 기다리는 동안 다른 계산을 진행하는 등 여러 활동을 나누어 관리할 수 있다. 스레드는 이런 실행 흐름을 표현하는 수단 중 하나다.

여러 스레드가 존재한다는 사실과 여러 CPU 코어에서 실제로 동시에 실행된다는 사실은 다르다. 실행 환경과 스케줄링 및 작업의 의존 관계가 실제 병렬 실행을 결정한다.

공유 메모리의 양면

같은 프로세스의 스레드들은 보통 같은 데이터에 접근할 수 있어 정보 교환이 편리하다. 그러나 한 스레드의 수정이 다른 스레드의 계산과 겹치면 결과가 실행 순서에 따라 달라질 수 있다.

각 스레드의 스택이 따로 있다는 설명이 모든 데이터가 분리된다는 뜻은 아니다. 스택에 저장된 주소가 공유 객체를 가리킬 수도 있으므로 객체의 실제 공유 관계를 살펴야 한다.

기다림과 동기화

여러 흐름이 함께 사용하는 상태에는 잠금과 원자적 연산 등 적절한 동기화가 필요할 수 있다. 다른 작업의 완료를 기다리는 관계를 명확히 설계하는 것도 중요하다.

동기화 도구가 있다고 올바른 결과가 자동으로 보장되지는 않는다. 잘못된 순서로 자원을 기다리면 교착 상태가 생기거나 특정 실행 흐름이 오래 지연될 수 있다.

구현과 비용

스레드를 운영체제가 직접 관리하는 방식과 사용자 공간의 실행 환경이 여러 흐름을 관리하는 방식은 다를 수 있다. 같은 이름의 기능이라도 실제 스케줄링 관계를 확인해야 한다.

스레드 수를 늘리는 데는 스택과 관리 구조, 전환 및 경합 비용이 든다. 작업이 작거나 공유 자원에서 자주 기다리면 수를 늘려도 처리 시간이 줄지 않을 수 있다.

관련 문서

프로세스 / 병렬 컴퓨팅 / 교착 상태 / 세마포어