19강 Actor 의 동작 관련해 질문드립니다
안녕하세요 앨런님!
19강에서 actor 를 이해 편의상 "특정한 하나의 스레드에서만 실행"되는 것처럼 그림을 첨부해주셨는데요 (물론 설명으로는 한번에 하나씩 실행되는건 맞지만 스레드를 특정할 수는 없다" 라고 말씀주셨지만요)
그러면 이해 편의상이 아니라, 좀 더 정확하게는 제가 이해한 내용이 맞을지 한번 확인 부탁드려도 될까요?
항상 좋은 강의 감사합니다.

기본적으로 actor 의 실행 스레드는 고정되어있지 않음
Actor 의 메서드나 데이터에 접근하면 serial executor 에 작업이 쌓일 것
이때 actor 는 선입 선출로 동작하지 않으므로, 우선 순위에 따라 실행 순서는 달라질 수 있음
Actor 의 작업이 실행될때 어느 스레드에서 실행할건지는 상관없고 중요하지도 않음. 한 작업이 끝나고 나면, serial executor 에서 대기하고 있던 작업은 어느 스레드에서든 heap 에 저장된 데이터 읽어서, 그 데이터 기반으로 작업하면 되는 것.
중요한건 데이터 경쟁이 발생하지 않게 serial executor 에 넣어서 actor 관련 작업은 한번에 하나의 스레드에서만 돌게 하는 매커니즘
回答 2
1
네 안녕하세요 sujinnaljin 님!
정확하게 이해하셨고, 저도 그렇게 그림을 그려드렸어요.
(강의 내용 17강 5분 7초 ~ 6분 20초 내용의 그림을 다시 보시면 되고, 교재의 경우 p.166 ~ 167 페이지에 내부적으로 여러쓰레드에서 동작할 수 있다고 말씀드리고 있습니다.)
잘 생각해보시면, 그게 앱 단에서 운영체제한테 쓰레드를 빌려쓰는 쓰레드 풀 방식의 개념하고 연결되기 때문에 당연히 그렇다고 보시면 됩니다.
(운영 체제 측면에서 보시면, "1개의 쓰레드"도 하드웨어와 긴밀하게 동작하게 만드는 특정한 객체입니다.)
(물론 메인 액터/메인 쓰레드의 경우) 프로그램을 실행하는 동안 운영체제가 아예 고정시켜서 특정 쓰레드 1개를 (메인으로 배치시켜서) 고정시키기 때문에, 1개의 앱이 메모리에서 실행될 때 "메인 쓰레드"는 내부적인 쓰레드 객체도 변할 일이 없겠지만,
액터의 경우,
(앱 단에서) 1개의 쓰레드만 (직렬적으로) 사용한다고 하더라도, (만약에 바쁘게 일을 계속 해야 한다면) 쓰레드를 운영체제에 반납할 일이 없겠지만, 덜 바쁜 일을 하게되면 당연히 운영체제에 사용하던 쓰레드를 반납하겠죠. (쓰레드풀 방식) 그러다가 액터에서 어떤 일을 수행해야 해서 쓰레드를 다시 운영체제에 빌려온다면.. 당연히 다른 쓰레드 객체이지 않을까요? (물론 우연으로 같은 객체일 수도 있겠죠.)
그런데 그게 어차피 앱단에서는,, 그걸 우리가 신경쓸 일은 아니니까.. (운영체제와 앱 단에서 알아서 일어나는 일일 뿐이니까) 중요한 것이 아니라고 말씀드리는 것이고요!
정확하게 이해하셨습니다 :)
감사합니다 !
0
안녕하세요, 인프런 AI 인턴입니다. 수진님이 Actor의 동작에 대해 질문해 주셨네요. Actor와 SerialExecutor, 그리고 Swift Concurrency에 관련된 개념을 명확하게 이해하는 것이 매우 중요합니다.
Actor의 동작과 Serial Executor
Actor의 실행 스레드 고정 여부
- 기본적으로 Actor의 실행 스레드는 고정되어 있지 않습니다. Actor가 특정 스레드에 고정되어 동작하지 않으며, 필요에 따라 다른 스레드에서 작업이 수행됩니다.
- 기본적으로 Actor의 실행 스레드는 고정되어 있지 않습니다. Actor가 특정 스레드에 고정되어 동작하지 않으며, 필요에 따라 다른 스레드에서 작업이 수행됩니다.
Serial Executor의 역할
- Actor의 메서드나 데이터에 접근하면 Serial Executor에 작업이 쌓입니다. 이 Serial Executor는 Actor와 관련된 모든 작업을 안전하게 관리하여 동시성 문제를 피합니다.
- Actor의 메서드나 데이터에 접근하면 Serial Executor에 작업이 쌓입니다. 이 Serial Executor는 Actor와 관련된 모든 작업을 안전하게 관리하여 동시성 문제를 피합니다.
작업의 우선 순위
- Actor는 우선 순위에 따라 작업 순서가 달라질 수 있습니다. 이는 Actor가 선입선출(FIFO) 방식만을 따르는 것이 아니며, 상황에 따라 우선 순위가 조정될 수 있습니다.
- Actor는 우선 순위에 따라 작업 순서가 달라질 수 있습니다. 이는 Actor가 선입선출(FIFO) 방식만을 따르는 것이 아니며, 상황에 따라 우선 순위가 조정될 수 있습니다.
작업 실행 스레드의 중요성
- Actor의 작업이 실행될 때 어느 스레드에서 실행되는지는 크게 중요하지 않습니다. 중요한 것은 Serial Executor가 각 작업을 하나씩 순차적으로 처리한다는 것입니다. 이는 데이터의 일관성을 유지하고 데이터 경쟁을 방지하는 데 중요한 요소입니다.
- Actor의 작업이 실행될 때 어느 스레드에서 실행되는지는 크게 중요하지 않습니다. 중요한 것은 Serial Executor가 각 작업을 하나씩 순차적으로 처리한다는 것입니다. 이는 데이터의 일관성을 유지하고 데이터 경쟁을 방지하는 데 중요한 요소입니다.
데이터 경쟁 방지
- Actor는 Serial Executor를 통해 데이터를 보호합니다. 한 번에 하나의 작업만 수행되도록 보장합니다. 이는 데이터 무결성과 일관성을 유지하기 위한 핵심 메커니즘입니다.
- Actor는 Serial Executor를 통해 데이터를 보호합니다. 한 번에 하나의 작업만 수행되도록 보장합니다. 이는 데이터 무결성과 일관성을 유지하기 위한 핵심 메커니즘입니다.
이미지나 추가 설명이 필요하시면, Actor 모델에 대한 Apple의 공식 자료 를 참고하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 증가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
수강 기간 연장 문의
0
28
1
수강연장부탁드려도될까요..
0
42
2
Combine Playground 에서 실행 시
0
57
2
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
39
2
70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문
0
42
1
searchable이 화면 하단에 위치해요
0
62
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
Actor에서 Task vs Task.detached 사용 시 재진입 문제 질문
0
104
2
18강 NSCache 예시 질문
0
99
2
Task 클로저 내 `non-Sendable` 값 타입 접근 시, 캡처 리스트가 정의된 Task 순서에 따른 컴파일러 에러 차이
0
118
1
3강 스레드 제어권 관리 질문드립니다
0
72
1
10번 강의 관련하여 질문드립니다.
0
71
2
ImageProject 관련 문의
0
59
1
10강 내용 문의드립니다.
0
84
2
강의를 들으면서 생긴 질문이 있습니다.
0
136
3
협력적 쓰레드 풀에서 쓰레드 운영방식 질문 드립니다.
0
81
1
안녕하세요. 액터 홉핑 관련 질문드립니다.
0
157
1
재개될 때 스레드 변경시 왜 컨텍스트 스위칭이 발생하지 않는 건가요?
0
315
2

