-
[운영체제] 스레드(Thread)운영체제 2023. 8. 11. 16:20
Overview
전에 프로세스에 대해 알아봤습니다.
2023.08.10 - [운영체제] - [운영체제] 프로세스(Process)
이번에는 스레드에 대해 알아봅시다.
스레드
스레드(thread)는 프로세스 내에서 실행되는 흐름의 단위입니다.
스레드는 Stack 영역에 존재합니다.
멀티 스레드
하나의 프로세스는 한 번에 여러 일을 동시에 처리할 수 있습니다. (멀티 스레드)
멀티 스레드와 다르게 멀티 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있습니다.
멀티 스레드는 위의 이미지처럼 같은 프로세스의 자원을 공유합니다.
또한 스레드 간의 전환 속도가 프로세스 간의 전환 속도보다 빠릅니다.
멀티 스레드에서 하나의 스레드가 문제가 생기면 모든 스레드에 영향을 주지만 멀티 프로세스에서는 하나의 프로세스가 다른 프로세스에 영향을 주지 않습니다.
멀티 스레드에서는 자원을 공유하기 때문에 실행 조건에 따라 값이 다르게 나올 수 있습니다.
var value = 0 for _ in 0..<10 { DispatchQueue.global().async { value += 1 print(value) } } // 출력: 5, 5, 5, 5, 5, 6, 7, 8, 9, 10
매번 호출마다 출력이 다르게 나옵니다.
var value = 0 let lock = NSLock() for _ in 0..<10 { DispatchQueue.global().async { lock.lock() value += 1 print(value) lock.unlock() } } // 출력: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
이처럼 동기화를 통해 문제를 해결해야 합니다.
스레드 데이터
스레드도 프로세스와 마찬가지로 실행 흐름입니다.
따라서 프로세스의 PCB처럼 실행과 관련된 데이터가 필요합니다.
일반적으로 고유한 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택을 가집니다.
마무리
커널, 프로세스 그리고 스레드까지 알아보니 반가운 것들이 많이 보이네요.
Xcode에서 PID가 보이네요
터미널에 vmmap 을 통해 메모리를 분석할 수 있습니다.
vmmap을 통해 확인한 것과 Xcode에서 보이는 것이 동일하네요 (thread 번호는 약간 다르네요)
Xcode의 Thread 1 (메인 스레드) 인데
vmmap에서 thread 0 (가장 마지막에 있는) 이 가장 용량(56.0M)이 큰 것으로 보아 동일한 것 같네요.
읽어주셔서 감사합니다.
참고
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
'운영체제' 카테고리의 다른 글
[운영체제] 프로세스(Process) (0) 2023.08.10 [운영체제] 시스템 호출 (System Call) (0) 2023.08.09 [운영체제] 커널(Kernel) (0) 2023.08.07