| 비유 | 실제 개념 |
|---|---|
| 레스토랑 | 프로세스(프로그램) |
| 직원(로봇) | 스레드 |
| 영혼 | CPU 코어의 실행권 (한 시점에 한 스레드 실행) |
| 구분 | 프로세스 | 스레드 |
|---|---|---|
| 정의 | 실행 중인 프로그램 인스턴스 | 프로세스 내부의 실행 흐름 |
| 메모리 | 프로세스마다 주소 공간 분리 | 같은 프로세스의 코드/힙/전역 데이터 공유 |
| 생성/전환 비용 | 상대적으로 큼 | 상대적으로 작음 |
| 안전성 | 다른 프로세스와 격리 강함 | 공유 자원 충돌 위험 높음 |
| 관계 | 최소 1개 스레드 포함 | 프로세스를 실제로 실행 |
main()에서 시작합니다.실무 팁:
std::thread::hardware_concurrency() 값은 힌트입니다(절대값 아님).스레드 A → 스레드 B로 전환 시:
| 상태 | 설명 |
|---|---|
| Ready | 실행 가능하지만 CPU 할당 대기 |
| Running | CPU에서 실행 중 |
| Waiting(Blocked) | I/O, 락, 이벤트 대기 |
| Terminated | 실행 종료 |
전이 감각:
Ready -> Running : 스케줄러가 CPU 할당Running -> Waiting : I/O/락 대기 진입Waiting -> Ready : 대기 조건 충족Running -> Terminated : 함수 종료/스레드 종료hardware_concurrency()는 참고값이며 튜닝이 필요하다는 점을 함께 설명하세요.| 오해 | 바로잡기 |
|---|---|
| 스레드가 많을수록 무조건 빠르다 | 컨텍스트 스위칭/락 경합으로 느려질 수 있음 |
| 한 프로세스 스레드는 서로 완전히 독립 | 힙/전역 데이터 공유 -> 동기화 필요 |
| 멀티코어면 컨텍스트 스위칭이 사라진다 | 스레드 수가 많으면 여전히 발생 |