안녕하세요 🐶
빈 지식 채우기의 비니🙋🏻♂️ 입니다.
오늘은 저번에 이어서 GCD 3편! Serial vs Concurrent 관해 알아보는 시간을 가지겠습니다.
GCD 2탄이 궁금하신 분들은 먼저 보고 오시면 더욱 이해가 쉬울거라 생각됩니다 ㅎㅎ :)
1. 개요
이번 포스팅은 개발자분들이 실제 프로젝트를 진행하면서 진짜 많이 쓰고 찾아보았던 것들에 대해 공부해보려고 합니다.
바로봐로~~~
Serial vs Concurrent
입니다. 실제로 어떻게 쓰는지에 대해서는 다음 포스팅에 다뤄보고,
오늘도 역시 이론 위주로 설명드리겠슴돠!
2. Serial vs Concurrent
이번에는 Sync, Async 를 뒤이어 Serial과 Concurrent를 다뤄보려고 합니다.
두 개념에 대해서는 엄연히 다른 용어이기 때문에 잘 보아주세요옹~
2-1. Serial
먼저, Serial의 사전적 정의는 다음과 같습니다.
형용사를 보면 "순차적인" 이라는 뜻을 볼 수 있습니다.
즉, 순차적으로 작업을 실행한다~ 라고 이해하면 됩니다.
오~ 그럼 여기서 질문!?
Sync도 앞 작업이 끝나기 전까지 뒷 작업 실행 못하니까 ...... 아!! Serial이랑 같은 거네 ㅎㅎㅎ
응 아니야~ 완전 달라 ~~
Sync는 "내 요청에 관한 답을 받을 때까지 기다릴 것이다!"
라는 단일작업의 특성을 지녔습니다.
고로 Sync는 앞 작업과 뒷 작업에 대한 연관성이 전혀 없기 때문에 전혀 다른 용어입니당.
근데?! 앞 작업과 뒷 작업을 "순차적으로" 실행시킬지 정하는 것이 바로 Serial 과 Concurrent 입니다.
그 중, Serial의 경우는 SerialQueue 이런 식으로 사용하게 되는데
대표적으로 Main Queue가 Serial Queue 입니다.
고로! Serial은
내 Queue에 들어온 작업들을 순차적으로 실행시킨다
의 의미로 해석될 수 있습니다.
위에 그림처럼 Sync의 경우 순차적으로 작업이 실행된다는 것을 알 수 있습니다.
코드 예제로 한번 보시죠!
func SyncTest() {
print("start") // (1)
DispatchQueue.main.async { // (4) > Async
for _ in 0...10 {
print("async")
}
}
for _ in 0...10 { // (2)
print("sync")
}
print("end") // (3)
}
이 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
- Sync인 "Start" 작업이 먼저 실행된다.
- Sync 인 For 구문이 Async For 구문보다 먼저 실행된다.
- Serial Queue이기 때문에 오직 하나의 작업만 가능하다.
- "end" 작업이 실행된다.
- 마지막으로 Async 작업이 실행된다.
위 일련의 작업들을 그림으로 보면 다음과 같다.
Serial Queue는 보통 작업의 "동기화" 를 할 때 사용합니다.
2-2. Concurrent
바로 사전적 정의로 알아보죠.
형용사를 보면 "동시에 발생" 이라는 뜻을 볼 수 있습니다.
즉, 동시다발적으로 작업을 실행한다~ 라고 이해하면 됩니다.
즉 Concurrent는
내 Queue에 들어온 작업들을 동시다발적으로 실행시키겠다.
라는 개념입니다.
바로 Concurrent 코드 예제로 넘어가 보겠습니당.
func ConcurrentTest() {
let concurrent = DispatchQueue.init(label: "SodeulQueue", attributes: .concurrent) // (1)
concurrent.sync { print("start") } // (2)
concurrent.async { for _ in 0...5 { print("async") }} // (3)
concurrent.sync { for _ in 0...5 { print("sync") } } // (4)
concurrent.sync { print("end") } // (5)
}
Concurrent Queue는 동시다발적인 작업을 실행시킬 수 있기 때문에
- Sync인 "start"가 먼저 실행된다.
- 3. 4. 5. 그 다음 두개의 For 구문과 "end" 구문이 동시에 실행된다
- 왜냐?! Concurrent Queue 이니까 동시다발적인 실행이 가능하다.
Concurrent Queue는 보통 작업을 동시다발적으로 실행 할 때 사용합니다.
2-3. Serial vs Concurrent
이상으로 GCD 3편 - Serial vs Concurrent 포스팅을 마치겠습니다.
틀린 부분이나 궁금한 사항은 댓글 남겨주세요~🤭
참고
'iOS 🖥️ > Common' 카테고리의 다른 글
[ iOS ] GCD 4편 - GCD ( Grand Central Dispatch ) (0) | 2023.01.19 |
---|---|
[ iOS ] GCD 2편 - Sync vs Async (2) | 2023.01.12 |
[ iOS ] GCD 1편 - 프로세스(Process) vs 쓰레드(Thread) (0) | 2023.01.11 |
[ iOS ] 메모리 구조 ( Code, Data, Stack, Heap ) (0) | 2023.01.04 |