강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

sujinnaljin님의 프로필 이미지
sujinnaljin

작성한 질문수

앨런 Swift Concurrency for Swift 6 (Part-2)

19강 Actor 의 동작 관련해 질문드립니다

해결된 질문

작성

·

10

0

안녕하세요 앨런님!

19강에서 actor 를 이해 편의상 "특정한 하나의 스레드에서만 실행"되는 것처럼 그림을 첨부해주셨는데요 (물론 설명으로는 한번에 하나씩 실행되는건 맞지만 스레드를 특정할 수는 없다" 라고 말씀주셨지만요)

그러면 이해 편의상이 아니라, 좀 더 정확하게는 제가 이해한 내용이 맞을지 한번 확인 부탁드려도 될까요?

항상 좋은 강의 감사합니다.

 

 

 

스크린샷 2025-12-23 오후 12.59.31.png
  • 기본적으로 actor 의 실행 스레드는 고정되어있지 않음

  • Actor 의 메서드나 데이터에 접근하면 serial executor 에 작업이 쌓일 것

  • 이때 actor 는 선입 선출로 동작하지 않으므로, 우선 순위에 따라 실행 순서는 달라질 수 있음

  • Actor 의 작업이 실행될때 어느 스레드에서 실행할건지는 상관없고 중요하지도 않음. 한 작업이 끝나고 나면, serial executor 에서 대기하고 있던 작업은 어느 스레드에서든 heap 에 저장된 데이터 읽어서, 그 데이터 기반으로 작업하면 되는 것.

  • 중요한건 데이터 경쟁이 발생하지 않게 serial executor 에 넣어서 actor 관련 작업은 한번에 하나의 스레드에서만 돌게 하는 매커니즘

답변 2

1

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네 안녕하세요 sujinnaljin 님!

 

정확하게 이해하셨고, 저도 그렇게 그림을 그려드렸어요.
(강의 내용 17강 5분 7초 ~ 6분 20초 내용의 그림을 다시 보시면 되고, 교재의 경우 p.166 ~ 167 페이지에 내부적으로 여러쓰레드에서 동작할 수 있다고 말씀드리고 있습니다.)

잘 생각해보시면, 그게 앱 단에서 운영체제한테 쓰레드를 빌려쓰는 쓰레드 풀 방식의 개념하고 연결되기 때문에 당연히 그렇다고 보시면 됩니다.
(운영 체제 측면에서 보시면, "1개의 쓰레드"도 하드웨어와 긴밀하게 동작하게 만드는 특정한 객체입니다.)

(물론 메인 액터/메인 쓰레드의 경우) 프로그램을 실행하는 동안 운영체제가 아예 고정시켜서 특정 쓰레드 1개를 (메인으로 배치시켜서) 고정시키기 때문에, 1개의 앱이 메모리에서 실행될 때 "메인 쓰레드"는 내부적인 쓰레드 객체도 변할 일이 없겠지만,

액터의 경우,
(앱 단에서) 1개의 쓰레드만 (직렬적으로) 사용한다고 하더라도, (만약에 바쁘게 일을 계속 해야 한다면) 쓰레드를 운영체제에 반납할 일이 없겠지만, 덜 바쁜 일을 하게되면 당연히 운영체제에 사용하던 쓰레드를 반납하겠죠. (쓰레드풀 방식) 그러다가 액터에서 어떤 일을 수행해야 해서 쓰레드를 다시 운영체제에 빌려온다면.. 당연히 다른 쓰레드 객체이지 않을까요? (물론 우연으로 같은 객체일 수도 있겠죠.)


그런데 그게 어차피 앱단에서는,, 그걸 우리가 신경쓸 일은 아니니까.. (운영체제와 앱 단에서 알아서 일어나는 일일 뿐이니까) 중요한 것이 아니라고 말씀드리는 것이고요!


정확하게 이해하셨습니다 :)
감사합니다 !

sujinnaljin님의 프로필 이미지
sujinnaljin
질문자

헉 완전 정확히 같은 그림을 그려주셨었군요 ㅋㅋㅋㅋ ㅜㅜ

덕분에 한번 더 개념 짚고 갈수 있게 됐습니다 ㅎㅎ 감사합니다~~!

0

안녕하세요, 인프런 AI 인턴입니다. 수진님이 Actor의 동작에 대해 질문해 주셨네요. Actor와 SerialExecutor, 그리고 Swift Concurrency에 관련된 개념을 명확하게 이해하는 것이 매우 중요합니다.

Actor의 동작과 Serial Executor

  1. Actor의 실행 스레드 고정 여부

    • 기본적으로 Actor의 실행 스레드는 고정되어 있지 않습니다. Actor가 특정 스레드에 고정되어 동작하지 않으며, 필요에 따라 다른 스레드에서 작업이 수행됩니다.
  2. Serial Executor의 역할

    • Actor의 메서드나 데이터에 접근하면 Serial Executor에 작업이 쌓입니다. 이 Serial Executor는 Actor와 관련된 모든 작업을 안전하게 관리하여 동시성 문제를 피합니다.
  3. 작업의 우선 순위

    • Actor는 우선 순위에 따라 작업 순서가 달라질 수 있습니다. 이는 Actor가 선입선출(FIFO) 방식만을 따르는 것이 아니며, 상황에 따라 우선 순위가 조정될 수 있습니다.
  4. 작업 실행 스레드의 중요성

    • Actor의 작업이 실행될 때 어느 스레드에서 실행되는지는 크게 중요하지 않습니다. 중요한 것은 Serial Executor가 각 작업을 하나씩 순차적으로 처리한다는 것입니다. 이는 데이터의 일관성을 유지하고 데이터 경쟁을 방지하는 데 중요한 요소입니다.
  5. 데이터 경쟁 방지

    • Actor는 Serial Executor를 통해 데이터를 보호합니다. 한 번에 하나의 작업만 수행되도록 보장합니다. 이는 데이터 무결성과 일관성을 유지하기 위한 핵심 메커니즘입니다.

이미지나 추가 설명이 필요하시면, Actor 모델에 대한 Apple의 공식 자료 를 참고하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 증가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sujinnaljin님의 프로필 이미지
sujinnaljin

작성한 질문수

질문하기