IOS์ GCD(Grand Central Dispatch)
: ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์์ ์ฝ๋๋ฅผ ๋์์ ์คํ์ํฌ ์ ์๋๋ก ํ๋ ํ๋ ์์ํฌ
GCD์ ์์
๋จ์ : Task
Task๋ฅผ Dispatch Queue์ ์ ๋ฌํ๋ฉด ์์คํ
์ ํด๋น ๋์ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํจ. Task์ ๋จ์๋ {} ๋ธ๋ก, DispatchWorkItem์ ์ธ์คํด์ค๊ฐ ๋๋ค.
Dispatch Queue๋ Main Thread, Background Thread์์ Task๋ค์ Serially or Concurrently ํ๋๋ก ์คํ์ํค๋ Dispatch Object์ ํด๋์ค์.
๋น๋๊ธฐ : DispatchQueue.main.async { code } |
๋๊ธฐ : DispatchQueue.main.sync { code } |
Main Queue์ ์ ๋ฌ๋ Task๋ ํญ์ Main Thread์ ์ํด ์ํ๋๋ค.
Global Queue์ ์ ๋ฌ๋ Task๋ํ Main Thread์์ ์ํ๋ ์ ์์ > sync์ ๋ฉ์๋ ์ฑ๋ฅ ์ต์ ํ๋ก ์ธํด ๋ฒ์ด์ง๋ ์ํฉ์ด๋ฉฐ, ํด๋น ํ๋จ์ GCD์์ ์คํํจ.
Issue
Main Queue์ sync๋ก Task๋ฅผ ์ ๋ฌํ ๊ฒฝ์ฐ, Dedlock์ ํตํ ์ฑ ๊ฐ์ ์ข ๋ฃ ์ด์ ๋ฐ์.
Conclusions
์์ง ๋ฐํ๋์ง ์์ Task๊ฐ ์กด์ฌํ๋ SerialQueue์ ๋๊ธฐ์ ์ผ๋ก Task๋ฅผ ์ ๋ฌํจ. ๊ด๋ จ ํ์ ๋ฐ์ ์, DeadLock์ด ๊ฑธ๋ฆฌ๋ฉด์ ์ฑ์ด ์ข ๋ฃ๋๋ ์ด์๊ฐ ๋ฐ์.

Async๋ฅผ ํตํด ๋น๋๊ธฐ ์ ์ผ๋ก Task๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ, Task๋ฅผ ํ๊ฒ Queue์ ์ถ๊ฐ๋ง ํ๊ณ ํด๋น ์ฝ๋ ๋ธ๋ก์ Return๋๋ค. ์ดํ ์ถ๊ฐ๋ Task๋ GCD์ ํ๋จ์ ๋ฐ๋ผ ํด๋น ์์ ์ ์คํ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ์ ํํ ์คํ ์์ ์ ์ ์๊ฐ ์๋ค.
Sync๋ฅผ ํตํด ๋๊ธฐ์ ์ผ๋ก Task๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ, ํด๋น Queue์ ์ถ๊ฐ๋ ์ฆ์ GCD๋ Task๋ฅผ Thread์ ๋ฐฐ์ ํ๊ณ ํด๋น Task๋ฅผ ์๋ฃํ๊ธฐ ์ ๊น์ง Queue์ ๋จ์ Task์ Lock์ ๊ฑธ๊ณ ํด๋น ์ฝ๋ ๋ธ๋ก์ผ๋ก Return ํ์ง ์๋๋ค.
Lock์ด ๊ฑธ๋ฆฌ๋ฉด Queue์ ๋จ์์๋ ๋ค๋ฅธ Task๋ค์ Thread๋ฅผ ๋ฐฐ์ ๋ฐ์ ์ ์๋ค.
See Also
- DispatchQueue, https://developer.apple.com/documentation/dispatch/dispatchqueue
- DispatchWorkItem, https://developer.apple.com/documentation/dispatch/dispatchworkitem
'๐ป ๊ฐ๋ฐ์ ์ด์ผ๊ธฐ > โ๏ธ ์ ๋ฆฌ๋ ธํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ์๋ฃ๊ตฌ์กฐ : Hash, Tree, Binary Search Tree, Heap, Priority Queue (2) | 2023.07.18 |
---|---|
XCode [14.3 ver] ์์ Archive๊ฐ ์๋๋ค๋ฉด... (2) | 2023.06.19 |
2์ฅ. ๊ฐ๋ฐ๊ธฐ๋ฒ (#2) (1) | 2023.06.17 |
[Kotlin] ์๋ฃ๊ตฌ์กฐ : Stack, Queue, Deque, Array, ArrayList, LinkedList (1) | 2023.06.16 |
2์ฅ. ๊ฐ๋ฐ๊ธฐ๋ฒ (#1) (1) | 2023.06.16 |