앨런 Swift Concurrency for Swift 6 (Part-2)
4) 협력적 쓰레드 풀 5) 쓰레드 사용방식의 비교 GCD vs Swfit Concurrency (3강)
3강 스레드 제어권 관리 질문드립니다
안녕하세요!
3강 6분 30초 부터 “func2가 스레드 제어권을 운영체제에 양보했다가 func2의 실행이 끝나면 재개되고 함수가 리턴” 이라는 내용이 나오는데요.
관련하여 아래 세 가지 문의 드립니다.
재개 <- 운영체제에서 func2로 스레드 제어권이 돌아온다는 건가요? 어떤 의미로 쓰인 말인지 궁금합니다.
func2가 리턴 될 때 스레드 제어권이 func2에 있었다면(1의 상황), 리턴 시점에 제어권도 func1로 돌아가는 게 맞나요?
결과적으로 func2가 리턴 될 때 스레드 제어권이 func2에서 func1로 양도되는 것은 GDC / Swift Concurrency 동일한건가요?
답변 주시면 감사하겠습니다. (_ _)
답변 1
1
네 안녕하세요 미뇽 님!
1. 네 맞습니다. 재개(resume)를 하게 되면, 양보했던 쓰레드 제어권을 다시 돌려받아 일처리를 하게 됩니다. (쓰레드 제어권이란 것은, "지금 실행되는 함수"가 가지고 있을 수 밖에 없다고 보시면 됩니다. 왜냐면.. 쓰레드 제어권은 쉽게 말하자면, "CPU를 내가 차지하고 사용할께"의 그 내부 컨트롤을 관리하는 개념이기 때문입니다. 그러니까, 여기서 func2는 다시 쓰레드 제어권을 돌려받아서, 함수를 재개시킨 것이다라는 의미로 설명드리고 있는 것입니다.)
2. 네 맞습니다. func1에서 func2를 호출한 상황이라고 가정하고 설명드렸고, (func2가 CPU를 차지하고 사용하다가) func2가 일처리가 다 끝나서 리턴하게 되면 ("func1아, 이제 CPU 니가 차지하고 사용해도 돼"..이런 것처럼) 쓰레드 제어권을 이제 func1에 넘기게 됩니다.
3. 네 맞습니다. func1 (Caller)에서 func2 (Callee)를 호출하게 되면, func1이 가지고 있던 쓰레드 제어권을 func2에게 넘겼다가 실행이 다 끝나면 func1이 돌려받게 되는데, 이 개념은 GCD나 Swift Concurrency나 동일합니다.
다만, 차이는.. GCD에서는 (func2입장에서 보면) func2는 쓰레드 제어권을 운영체제에게 양보할 수 있는 개념이 없는데, (그래서 func2는 한번 일을 시작하면 무조건 끝날때까지 동작할 수 밖에 없는데)
Swift Concurrency는 func2가 운영체제에게 잠깐 쓰레드 제어권을 양보해서, (중간에) 운영체제가 다른 일처리를 해도 될 수 있게 되는 개념입니다. (운영체제는 그 양보 받은 쓰레드 제어권을 또 다른 어떤 함수에게 잠깐 빌려줘서 일을 시키겠죠.)
4강에서 메모리 구조적으로 어떻게 함수가 잠깐 멈췄다가 실행될 수 있는지의 내용을 참고하셔서 생각해 보시면 많은 도움이 되실꺼예요! 이해가 안되시는 부분이 있으시면 추가적으로 질문주세요 :)
감사합니다. :)
수강 기간 연장 문의
0
28
1
수강연장부탁드려도될까요..
0
42
2
Combine Playground 에서 실행 시
0
57
2
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
39
2
70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문
0
41
1
searchable이 화면 하단에 위치해요
0
61
2
모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??
0
85
1
mac python 3.10 - permission denied
0
54
1
Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?
0
73
2
Drawing Cycle 관련 질문
0
72
1
2.스레드 생성과 실행 - 17P 그림 문의
0
74
2
자바 동시성 현업에서 사용예시가 궁금합니다
0
136
1
20강 Task 내부에서 nonisolated async 호출 예제 질문드립니다
0
78
2
19강 Actor 의 동작 관련해 질문드립니다
0
83
2
Actor에서 Task vs Task.detached 사용 시 재진입 문제 질문
0
104
2
18강 NSCache 예시 질문
0
99
2
Task 클로저 내 `non-Sendable` 값 타입 접근 시, 캡처 리스트가 정의된 Task 순서에 따른 컴파일러 에러 차이
0
118
1
10번 강의 관련하여 질문드립니다.
0
71
2
ImageProject 관련 문의
0
58
1
10강 내용 문의드립니다.
0
84
2
강의를 들으면서 생긴 질문이 있습니다.
0
136
3
협력적 쓰레드 풀에서 쓰레드 운영방식 질문 드립니다.
0
81
1
안녕하세요. 액터 홉핑 관련 질문드립니다.
0
157
1
재개될 때 스레드 변경시 왜 컨텍스트 스위칭이 발생하지 않는 건가요?
0
315
2





