thread run
스레드는 코드 조각을 동시에 돌리지만 종료와 소유권 경계가 먼저다
동시성은 독립 작업을 겹쳐 실행하는 구조이고, 병렬성은 여러 코어에서 실제로 동시에 처리하는 실행 방식이다. Rust에서는spawn,
move, join을 함께 읽는다.
읽는 기준
출력 순서는 보장되지 않는다. 생성한 스레드가 끝나야 하는 지점과
값이 어느 스레드로 이동하는지를 먼저 표시한다.
| 개념 | 의미 | 코드 신호 | 읽을 위험 |
|---|---|---|---|
| 동시성 | 여러 작업이 독립적으로 진행된다. | 작업 분리와 스케줄링 | 순서가 고정됐다고 착각한다. |
| 병렬성 | 여러 코어에서 실제로 동시에 실행된다. | CPU 코어와 운영 체제 스케줄러 | 항상 빨라진다고 가정한다. |
thread::spawn |
클로저를 새 스레드에서 실행한다. | 반환값은 JoinHandle |
메인 종료 전에 끝나지 못할 수 있다. |
move |
필요한 값을 클로저 안으로 옮긴다. | move || |
빌린 값이 다른 스레드에서 오래 살아남는다. |
join |
생성된 스레드 완료를 기다린다. | handle.join() |
기다리는 위치에 따라 출력 순서가 달라진다. |
Start
spawn은 작업을 시작하지만 완료를 보장하지
않는다.
Own
move는 새 스레드가 쓸 값을 명확히 소유하게
한다.
Order
출력 순서는 스케줄러에 따라 달라져 테스트 기준이 되기
어렵다.
Wait
join은 합류 지점이며 프로그램 종료 경계를
만든다.