ios 코어가 좀 특이한 형태 같다. ios 코어가 정말 잘 만들어진 형태이면서 원래 이것이 최초가 아니었나 싶다. 다른 것들이 ios 를 참고해서 따라한 것 같아 보인다. 굉장히 잘 만들어진 거 같기두 하지만... 사용하기엔 조금 복잡성은 있는 듯 하다. 이 복잡한 것을 이 정도로 녹여내었다는 것이 대단하다.
nodejs 는 코어가 이벤트루프에 단일스레드 기본이라 가장 간단하다. 보통 운영체제는 멀티쓰레드가 기본인데, nodejs (js 진영) 는 기본적으로 단일쓰레드에 이벤트루프로 Task 를 던져서 순차적으로 처리하는 방식인데 ios 는 GCD 랑 Operation 이라는 것으로 이벤트루프 비슷한 방식을 적용하면서도 그것을 멀티쓰레드에 적용을 하였다. UI 를 다루고 async 한 동작이 많아서 그런듯 보인다.
결국 자바의 SWING 같은거로 개발해봐도 무거운 작업은 멀티쓰레드로 빼면서 작업하고 UI 동작은 메인쓰레드 기준으로 하고 하는 원리는 비슷한데 이것을 고도화 해서 개발하다 보면 이러한 방식으로 이벤트루프 큐 같은 형태의 구조를 갖게 될 것이다. 이것을 아예 ios 는 큐를 적용해서 운영체제 레벨로 만든 것 같다. ios 의 코어는 일반적으로 알고 있는 전형적인 멀티쓰레드 OS 와는 달리 멀티쓰레드 기반의 OS 에 이벤트큐 방식으로 관리되는 방식이다. 기본적으로 Grand Central Dispatch 와 Operation 큐를 가지고 태스크를 다룬다. NSThread 로 직접 쓰레드를 다룰 수도 있긴하다.
GCD - 디스패치큐: (글로벌) 메인 , 글로벌 , 프라이빗 (커스텀 - 기본적으로 Serial 이지만 Concurrent 로 설정가능하며 QoS 설정 가능)
OperationQueue - 오퍼레이션큐
안드로이드의 경우 SWING 처럼 UI 는 메인 쓰레드로 되어 있고 무거운 작업은 다른 쓰레드로 처리하도록 하며 루퍼 메시지큐 핸들러 를 통해서 쓰레드 간 통신을 한다. 전형적인 멀티쓰레드 OS 구조이다. 자바 안드로이드의 경우 함수가 일급함수가 아니기 때문에 클로저 개념이 없을 듯 한데 코틀린 안드로이드에서는 클로저가 존재하고 async await 도 존재하는 걸로 봐 아마도 비동기 태스크를 위한 이벤트루프 큐 같은 것이 존재할 것으로 보인다.
'MAC & iOS' 카테고리의 다른 글
Clean Architecture using SwiftUI (0) | 2023.09.13 |
---|---|
iOS 앱 소유권 이전 (1) | 2023.07.20 |
앱 및 웹 기술의 UI 기술에 대하여 (0) | 2023.01.25 |
재은씨 실전편 (0) | 2022.09.04 |
재은씨 기본편 (0) | 2022.09.04 |