안녕하세요, iOS 개발하는 루피입니다. 개발을 하시면서, DispatchQueue.global().async라는 코드를 한 번쯤은 사용해 보셨을 겁니다. 우리는 이 코드를 통해 무거운 작업을 백그라운드 스레드로 보내 UI 프리징을 막곤 하죠. 하지만 혹시 이런 질문을 던져본 적 있으신가요?DispatchQueue/global() 은 정확히 무엇일까?왜 우리는 Thread.start()처럼 스레드를 직접 만들지 않을까?시스템은 우리가 던져준 작업을 어떻게 처리하고 있는 걸까?오늘은 이러한 숨겨진 내부 동작을 공부해 보면서, iOS 동시성의 가장 낮은 곳에 있는 RunLoop와 Thread Pool의 개념을 이해하고, 이를 통해 우리가 자주 사용하는 GCD와 OperationQueue가 왜 효율적인 방법인..
DispatchQueue
안녕하세요, 루피입니다. 오늘은 지난 글을 작성하면서 생겼던 궁금증을 해결해보는 시간을 가져보도록 하겠습니다. 바로 시작합니다.궁금증 발생Dispatch Queue에 대해 공부하면서 Concurrent + Sync 형태의 동작에 대해 의문을 가지게 되었습니다.Button("concurrent - sync") { print("A") concurrentQueue.sync { sleep(3) print("B") } print("C")}문제의 그 코드입니다.❓저의 생각은 이렇습니다. (처음 생각)❓Concurrent는 단일 Thread가 아닌 여러 Thread에 작업을 할당하는 Queue의 종류입니다. 즉, 직렬의 방식이 아닌 병렬의 방식으로 작업을 분배합니다. Sync는 등록한 ..
안녕하세요, 루피입니다. 오늘은 저번 시간에 이어 DispatchQueue에 대해 공부해 보도록 하겠습니다. 만약에 이해가 잘 가지 않는다면, 저번 글 을참고하시면 좋을 거 같습니다! 바로 시작하겠습니다.DispatchQueue란?DispatchQueue가 무엇인지에 대해 작성하기에 앞서 저번 글에 있던 내용을 상기시켜 보도록 하겠습니다.GCD(Grand Central Dispatch)는 멀티코어 하드웨어의 자원을 효율적으로 활용할 수 있게 도와주는 시스템 수준의 기술입니다. 간단하게 말해, GCD를 사용하면 여러 코어에 걸쳐 작업을 병렬 처리할 수 있습니다. 우리는 GCD 덕분에 Thread 관리나 스케줄링에 대한 고민을 줄이고 DispatchQueue에 작업을 할당하면 GCD가 알아서 동시성 프로그..