해당 글은 Swift Concurrency 1편과 이어지는 내용입니다.
1편부터 보고 와주시길 바랍니다.
Actor는 어떻게 비동기와 동시성 처리가 가능 할까요?
사진을 보면서 다시 이해해 보죠.
Actor는 행동, 상태, 수신함으로 구성됩니다.
이때, 상태는 메시지를 수신 받을때 Actor 외부에선 변경이 불가하고, 자신만 변경이 가능합니다.
수신함은 직렬 큐이기에 순서대로 처리됩니다.
메시지에 따라 행위를 결정하게 되죠.
즉,
Actor
끼리 수신함을 향해 메시지를 보내고 있는 부분을
async / await
로 구현되게 되는겁니다.
즉 다시 사진을 보며, 각Actor
들은 각자만의 고유한 영역이 있습니다 이는 격리 되었다고 표현하며
Actor State Isolation
한 것이죠. 또한, 이들이 결합하여 컴파일이 된다면
컴파일러에서low-level의 Data Race
가 발생하지 않음을 보장해줍니다.
공유하는 여러개의 개별 컴퓨팅 노드 ( 컴퓨터 ) 에서 하나의 공동의 목표 즉
하나의 통합된 시스템 처럼 동작하는 컴퓨터 시스템을 말합니다.온라인 게임을 흠... 롤(League of Legends)을 한번 생각해 봅시다.
독립적
으로 챔피언들을 동작 시킬 수 있습니다.플레이(통신)
합니다.분산 시스템에서 안전하게 상태, 행위 를 관리 해주는 기능입니다.
네트워크를 통해 서로 통신하는 독립적인 컴포넌트로, 데이터의 일관성, 병렬처리를 도와줍니다.
네트워크상 다른 엑터에게 메시지를 보낼수 있습니다.
import Distributed
distributed actor ChatUser {
distributed func sendMessage(_ message: String, toUser: ChatUser) async {
// 다른 유저에게 메시지 에 로직~~~
print("sends message: \(message) to \(toUser)")
}
}
Task {
await alice.sendMessage("취뽀 가즈아!", to: iOS_Dev)
}
이번편도 상당히 어려운 개념을 다루게 되버렸습니다...!
저도 다시봐도 어질 어질 한 부분이라 계속해서 다시 읽어 봐야 할것 같습니다... ㅠ
Apple
에서도 이에 대한 코드를 제공해 주고 있습니다.
Apple_swift_distributed_actor 해당 링크를 통해 더 자세히 공부 하실분들은 참고해주세요!
다음편은GCD VS Swift Concurrency
입니다...!
어려워요ㅕㅇ려여여ㅇ유유ㅠㅠㅠ