ํฐ์คํ ๋ฆฌ ๋ทฐ

์๋ ํ์ธ์?
๋๊ตฌ๋ฆฌ์ ๋๋ค.
์ค๋์ Dispatch Group์ ๋ํด ์ ๋ฆฌํด ๋ณด๋ ค ํฉ๋๋ค
Dispatch Group ์ด๋?
dispatch group์ ๋ฌด์์๊น์?
dispatch๋ฅผ ๋ฌถ์ด๋์๊ฑธ๊น์?
์ผ์ถ ๋น์ทํฉ๋๋ค.
๊ณต์๋ฌธ์๋ก ๊ฐ๋ ์ ์ดํด๋ณผ๊ฒ์

- ์ฌ๋ฌ task๋ฅผ ํ๋์ ์ ๋์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๊ทธ๋ฃน์ ๋๋ค.
- item(=task)๋ค์ ๋ฌถ๊ณ ๋๊ธฐ์ ์ธ ๋๊ธฐ์ ์ผ๋ก ํ๋ํ๊ฒ ํ ์ ์๋ค
- ์ฌ๋ฌ item์ ๋ฌถ๊ณ , ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ค๋ฅธ ํ์์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ์ํจ๋ค.
- item๋ค์ ์์ ์ด ๋๋๋ฉด ์ปดํ๋ฆฌ์ ํธ๋ค๋ฌ๋ฅผ ์คํ์ํจ๋ค. ๋ํ ์์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐ์ ์ผ๋ก ๋ฉ์ถ ์ ์๋ค.
task๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ ์น๊ตฌ์ ๋๋คใ ใ
๊ทธ๋ฆผ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํด ๋ณผ๊ฒ์!

task1,2,3์ด group1์ ๋ฌถ์ฌ ์์ต๋๋ค!
์ผ๋จ ํธ์์ ์ฌ๋ฌ ์ค๋ ๋์ task์ ๋ถ๋ฐฐํ๋๋ฐ์!
์ด๋ ์ค๋ ๋์ ์๋ ๋ง์ง๋ง task3๊ฐ ๋๋๋ฉด
notify๋ฅผ ํตํด group1์ด ๋๋ฌ๋ค๊ณ ์๋ ค์ค๋๋ค!
์ด์ ๋ ์ฝ๋๋ก ์ฌ์ฉ๋ฒ์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค!ใ ใ
let workingQueue = DispatchQueue(label: "neoguri", attributes: .concurrent)
let numberArray = [(0,1), (2,3), (4,5), (6,7), (8,9), (10,11)]
// ๋์คํจ์น ๊ทธ๋ฃน ์์ฑ
let group1 = DispatchGroup()
// ์์
๋ค์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ณด๋ผ๋ "๊ทธ๋ฃน ๊ผฌ๋ฆฌํ" ๋ถ์ด๊ธฐ
for inValue in numberArray {
// ์์์ ์์ฑํ ๋์คํจ์น ๊ทธ๋ฃน์ ์๊ท๋จผํธ์ ๋ฃ๊ธฐ
workingQueue.async(group: group1) {
let result = slowAdd(inValue)
print("๋ํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅํ๊ธฐ = \(result)")
}
}
// ๊ทธ๋ฃน์ ๋ชจ๋ ์์
์ด ์๋ฃํ์๋ ์๋ฆผ(notify) ๋ฐ๊ธฐ
let defaultQueue = DispatchQueue.global()
// ๊ทธ๋ฃน์ notify. ์์
์ด ์๋ฃํ๊ณ ์ด๋ค ์ผ์ ํ ๊ฒ์ธ์ง ์ ํ๊ธฐ
group1.notify(queue: defaultQueue) {
print("====๊ทธ๋ฃน1 ์์ ๋ชจ๋ ์์
์ด ์๋ฃ====")
}
dispatch group์ ์ธ์คํด์ค๋ก ๋ง๋ค์ด ์ฃผ๊ณ
ํ์ task๋ฅผ ๋ณด๋ผ ๋ async ๋ฉ์๋ ์ group์ธ์์ ์์ฑํ dispatch group์ธ์คํด์ค๋ฅผ ๋ฃ์ด ์ค๋๋ค!
๊ทธ๋ฆฌ๊ณ group์ ๋ชจ๋ item์ด ๋์ ์๋ฃ ๋๋ฉด ์คํํ ์ฝ๋๋ฅผ
group ์ธ์คํด์ค์ notifyํจ์ ์์ ๊ตฌํํด ์ค๋๋ค!
๊ทธ๋ฆฌ๊ณ notify์์ ์ํํ ์์ ๋ ํ๋ฅผ ์ง์ ํด ์ค ์ ์์ด์!
๊ทธ๋ผ group์ด ๋๋ ๋ ๊น์ง sync๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ญ๊น?
sync๋ฅผ ๋ถ์ธ๋ค?
๋!!!!
Dispatch group์ wait์ด๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํด ๊ตฌํํ ์ ์์ด์!
์ด๋ฐ ์์ ์ ๊ทธ๋ฃน ์๋ฃ ์๋ฆผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ตํ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
์ฆ ๋ชจ๋ ์์ ์ด ์๋ฃ ๋ ๋๊น์ง ํ๋ฅผ ์ฐจ๋จํ๋ ๋๊ธฐ์ ๋ฐฉ๋ฒ์ด์ฃ
์์ ์ด ์๋ฃ๋๋ ์์ ๊น์ง ๊ธฐ๋ค๋ฆด ์๋ ์๊ณ , ์๋ฃ์ ์๊ด์์ด ์ผ์ ์๊ฐ์ ๊ธฐ๋ค๋ฆด์๋ ์์ด์!
๋ค๋ง ์ฃผ์ํ ์ !!!!!
์ ๋ฒ ํฌ์คํ ์์ ์์๋ณด์๋ฏ์ด ๋ฉ์ธํ๋ ๋ฉ์ถ๋ฉด ์๋๊ธฐ ๋๋ฌธ์
๋ฉ์ธ ํ์์๋ ์ ๋ wait์ ์ฌ์ฉํ๋ฉด ์๋ฉ๋๋ค!!! ์ ๋!!!
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ์์ ์ฌ์ฉํ ๋๋
ํ ์์ฒด๋ฅผ ๋ง์๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํ ์ฌ์ฉํด์ผํฉ๋๋ค!
์ฝ๋๋ก ์ด๋ป๊ฒ ์ฐ๋์ง ์์๋ณผ๊ฒ์!
let workingQueue = DispatchQueue(label: "neoguri", attributes: .concurrent)
let numberArray = [(0,1), (2,3), (4,5), (6,7), (8,9), (10,11)]
// ๋์คํจ์น ๊ทธ๋ฃน ์์ฑ
let group1 = DispatchGroup()
// ์์
๋ค์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ณด๋ผ๋ "๊ทธ๋ฃน ๊ผฌ๋ฆฌํ" ๋ถ์ด๊ธฐ
for inValue in numberArray {
// ์์์ ์์ฑํ ๋์คํจ์น ๊ทธ๋ฃน์ ์๊ท๋จผํธ์ ๋ฃ๊ธฐ
workingQueue.async(group: group1) {
let result = slowAdd(inValue)
print("๋ํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅํ๊ธฐ = \(result)")
}
}
if group1.wait(timeout: .now() + 60) == .timedOut {
print("๋ชจ๋ ์์
์ด 60์ด ์์ ๋๋์ง ์์์ต๋๋ค.")
}
์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํด๋น ์ฝ๋๋ ์คํ์ด ์๋ ๊ฒ๋๋ค.
์๋ํ๋ฉด group1์ด 60์ด๋ฅผ ๋๊ธฐ์ง ์์๊ฒ์ด๋๊น์.
๋ค๋ง ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ธฐ ์ํด ์์ฑํ์์ต๋๋ค!
๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ถ์ฒ : https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard
iOS Concurrency(๋์์ฑ) ํ๋ก๊ทธ๋๋ฐ, ๋๊ธฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ทธ๋ฆฌ๊ณ GCD/Operation - ๋์คํจ์นํ์ ์คํผ๋ ์ด์
๋์์ฑ(Concurrency)ํ๋ก๊ทธ๋๋ฐ - iOSํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋๊ธฐ, ๋น๋๊ธฐ์ ๊ฐ๋ ๋ฐ ๊ทธ๋ฅผ ํ์ฅํ GCD ๋ฐ Operation์ ๊ดํ ๋ชจ๋ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS/Swift] URL Loading System ์์๋ณด๊ธฐ (0) | 2023.05.29 |
|---|---|
| [iOS/Swift] ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ - DispatchGroup์ ์ฌ๋ฌ ์ฌ์ฉ๋ฒ (0) | 2023.01.29 |
| [iOS/Swift] ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ - GCD์ ์ฃผ์์ฌํญ (0) | 2023.01.08 |
| [iOS/Swift] ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ - GCD์ ์ข ๋ฅ ์์๋ณด๊ธฐ (0) | 2023.01.02 |
| [iOS/Swift] ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ - sync vs async, serial vs concurrent (0) | 2022.12.31 |
- Total
- Today
- Yesterday
- func
- swift ๊ณต๋ถ
- swift urlsession
- ํ๋กํผํฐ
- Clean
- RX
- test
- observable
- ์ค์ํํธ
- xcode
- ํ๋กํ ์ฝ
- ํ ์คํธ
- XCTest
- autolayout
- ์ค์ํํธ ๊ณต๋ถ
- network
- RxSwift
- ์ค์ํํธ map
- ios
- ๊ณต๋ถ
- ์คํ ๋ ์ด์์
- Swift Network
- set
- Property
- URLSession
- swift
- swift ํ๋กํ ์ฝ
- Protocol
- Unit Test
- ์ค์ํํธ ํ๋กํ ์ฝ
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |