ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š”?

๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

 

์˜ค๋Š˜์€ 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

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ