12์ 16์ผ (๋ชฉ)
- ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ํ๋ํ์ต
- GCD๋? ย
[๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ํ๋ํ์ต]
- ๋์์ฑ(Concurrency) ํ๋ก๊ทธ๋๋ฐ, ๋ณ๋ ฌ(Parallelism) ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ป๊ฒ ๋ค๋ฅด๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ก ์ ํ iOS ํ๊ฒฝ์์๋ ๋ฌด์์ ๋ ๊ณ ๋ คํด๋ด์ผ ํ ๊น?
- ๋์์ฑ(Concurreny)
- ๋ ผ๋ฆฌ์ ์ธ ์ฉ์ด
- ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์
- ์ฑ๊ธ ์ฝ์ด์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ๋์์ํค๊ธฐ ์ํ ๋ฐฉ์
- ๋ฉํฐ ์ฝ์ด์์๋ ๋์์ฑ์ ์ฌ์ฉ๊ฐ๋ฅ
- ๋ฉํฐํ์คํน์ ์ํด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์คํ๋๋ ์ฑ์ง
- ๋์์ฑ์ ์ด์ฉํ ์ฑ๊ธ ์ฝ์ด์ ๋ฉํฐ ํ์คํน์ ๊ฐ ์ค๋ ๋๋ค์ด ๋ณ๋ ฌ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์กฐ๊ธ์ฉ ์คํ๋๊ณ ์๋ ๊ฒ
- ๋ณ๋ ฌ์ฑ(Parallelism)
- ๋ฌผ๋ฆฌ์ ์ธ ์ฉ์ด
- ์ค์ ๋ก ์์ ์ด ๋์์ ์ฒ๋ฆฌ๋๋ ๊ฒ
- ๋ฉํฐ์ฝ์ด์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ๋์์ํค๋ ๋ฐฉ์
- ํ ๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ํฌํจํ๋ ๊ฐ ์ฝ์ด๋ค์ด ๋์์ ์คํ๋๋ ์ฑ์ง
- ๋ณ๋ ฌ์ฑ์ ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ(Data Parallelism)๊ณผ ์์
๋ณ๋ ฌ์ฑ(Task Parallelism)์ผ๋ก ๊ตฌ๋ถ
- ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ : ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋๋์ด ์๋ธ ๋ฐ์ดํฐ๋ค๋ก ๋ง๋ ๋ค, ์๋ธ ๋ฐ์ดํฐ๋ค์ ๋ณ๋ ฌ ์ฒ๋ฆฌํด์ ์์ ์ ๋น ๋ฅด๊ฒ ์ํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์์ ๋ณ๋ ฌ์ฑ : ์๋ก ๋ค๋ฅธ ์์ ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค.
- ๋์์ฑ(Concurreny)
- ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ, ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ, ๋๊ธฐ(asynchronous)์ ๋น๋๊ธฐ(asynchronous)์ ๊ฐ๋
์ ์ด๋ค ์๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๊น?
- ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
- ํ๋ก๊ทธ๋จ์ ์ฃผ ์คํ ํ๋ฆ์ ๋ฉ์ถ์ด์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ ์คํํ ์ ์๊ฒ ํ๋ ๋ฐฉ์์ด๋ค. ์ฝ๋์ ์คํ ๋ฐ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋์ ๊ณต๊ฐ์ ๋งก๊ฒจ๋ ๋ค ๊ทธ ์คํ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ณ๋ ฌ์ฒ๋ฆฌ ๋ฐฉ์์ด๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ธ์ด ๋ฐ ํ๋ ์์ํฌ์์ ์ง์ํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
- ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ
- ๋ ผ๋ฆฌ์ ์ธ ์ฉ์ด๋ก ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๋ฐฉ์์ด๋ค. ์ฑ๊ธ ์ฝ์ด์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ๋์์ํค๊ธฐ ์ํ ๋ฐฉ์์ผ๋ก ๋ฉํฐ ํ์คํน์ ์ํด ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์คํ๋๋ ๋ฐฉ์์ด๋ค.
- Async vs Sync
- Async๋ ๋น๋๊ธฐ๋ค. ๋น๋๊ธฐ๋ ๋ด๊ฐ ์์ ์ ๋งก๊ธฐ๊ณ ์คํ๋๋ ๋์์ ๋๋ ๋ ๋ค๋ฅธ ์ผ์ ํ ์ ์๋ ๊ฒ์ ๋ปํ๋ค. ์๋ฅผ ๋ค์ด ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์๋ฌด๊ฒ๋ ๋ชปํ๋๊ฒ ์๋๋ผ ๋ค๋ฅธ์ผ์ ํ ์ ์๋ ๊ทธ๋ฐ ๋๋์ด๋ค. ๋ฐ๋๋ก Sync๋ ํด๋น ์์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
- ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
- ์ ํ์ด ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ๋๋ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๋ฌด์๋ฌด์์ด ์์๊น?
- Grand Central Dispatch(GCD)
- ๋ฉํฐ ์ฝ์ด์ ๋ฉํฐ ํ๋ก์ธ์ฑ ํ๊ฒฝ์์ ์ต์ ํ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋๋ก ์ ํ์ด ๊ฐ๋ฐํ ๊ธฐ์ ์ด๋ค.
- Operation Queue
- ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋์ด์ผํ๋ ์์ ์ ๊ฐ์ฒด ์งํฅ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ค
- Thread
- ์ค๋ ๋๋ ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์ ํ๋ฆ์ ๋จ์๋ฅผ ๋งํ๋ค. ๋ณดํต ํ ํ๋ก์ธ์ค๋ ํ๋์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ํ๊ฒฝ์ ๋ฐ๋ผ ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ ์๋ ์๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋ฉํฐ์ค๋ ๋ฉ์ด๋ผ๊ณ ํ๋ค. ํ๋ก๊ทธ๋จ ์คํ์ด ์์๋ ๋๋ถํฐ ๋์ํ๋ ์ค๋ ๋๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ผ๊ณ ํ๊ณ ๋์ค์ ์์ฑ๋ ์ค๋ ๋๋ฅผ ์๋ธ ์ค๋ ๋ ๋๋ ์ธ์ปจ๋๋ฆฌ ์ค๋ ๋๋ผ๊ณ ํ๋ค.
- Grand Central Dispatch(GCD)
- ํ๋ก๊ทธ๋๋ฐ์์ Thread๋ ๋ฌด์์ด๊ณ iOS ํ๊ฒฝ์์ ์ด๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ ๋ฌด์๋ฌด์์ด ์์ผ๋ฉฐ ๊ทธ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
- Thread
- ์ค๋ ๋๋ ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์ ํ๋ฆ์ ๋จ์๋ฅผ ๋งํ๋ค. ๋ณดํต ํ ํ๋ก์ธ์ค๋ ํ๋์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ํ๊ฒฝ์ ๋ฐ๋ผ ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ ์๋ ์๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋ฉํฐ์ค๋ ๋ฉ์ด๋ผ๊ณ ํ๋ค. ํ๋ก๊ทธ๋จ ์คํ์ด ์์๋ ๋๋ถํฐ ๋์ํ๋ ์ค๋ ๋๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ผ๊ณ ํ๊ณ ๋์ค์ ์์ฑ๋ ์ค๋ ๋๋ฅผ ์๋ธ ์ค๋ ๋ ๋๋ ์ธ์ปจ๋๋ฆฌ ์ค๋ ๋๋ผ๊ณ ํ๋ค.
- Thread
- iOS ํ๊ฒฝ์์์ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ์ง์ ์ข
๋ฅ
- GCD (Grand Central Dispatch) : ๋ฉํฐ ์ฝ์ด์ ๋ฉํฐ ํ๋ก์ธ์ฑ ํ๊ฒฝ์์ ์ต์ ํ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋๋ก ์ ํ์ด ๊ฐ๋ฐํ ๊ธฐ์ ์ด๋ค.
- Operation Queue : ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋์ด์ผ ํ๋ ์์ ์ ๊ฐ์ฒด ์งํฅ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ค
- Thread : ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ ํ์์ ์ ๊ณตํ๋ ์ค๋ ๋ ํด๋์ค
[๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ]
- ํ๋์จ์ด ์์คํ ๋ค์ ๋ค ๋๊ธฐ์ ๋ง์ถฐ ๋์ํ๋ค.
- ์๋ฒ์ ์๋ ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๋ค ๋ฐ์์ฌ ๋ ๊น์ง ๋ฉ์ถฐ์๋๋ค.
[๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ]
- ์์ ์ ๋ถ๋ฆฌํด์ ์ฌ์ฉํด์ผํ๋ค.
- ์๋ฒ๊ฐ ์์ ๊ฒ์ด๊ณ ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ ํ๋ฉด์ ํ์ํ๋ ํํ๋ก ์ฑ์ด ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
[Parallel(๋ณ๋ ฌ) vs Concurrency(๋์)]
- ๋ณ๋ ฌ
- ๋ฌผ๋ฆฌ์
- ๋ฌผ๋ฆฌ์ ์ค๋ ๋์์ ์ค์ ๋์์ ์ผ์ ํ๋ ๊ฐ๋
- ๋์
- ๋ ผ๋ฆฌ์
- ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ๋ค๋ฅธ ์ํํธ์จ์ด์ ์ธ ์ค๋ ๋์์ ๋์์ ์ผ์ ํ๋ ๊ฐ๋
- Concurrent Programming
- ์ฅ์
- UI ํ๋ฉด์ ์ธ์ ๋ ๋ฐ์์ฑ์ ์ ์งํด์ผ ํ๋ค.
- ๋ณ๋ ฌ ์คํ์ ๋ ๋น ๋ฅด๋ค
- ๋น์ฉ
- ์ ๋๋ก ๋ฉํฐ์ค๋ ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ์ ๋ฌด์ง๋ง์งํ๊ฒ ์ด๋ ต๋ค.
- ํ์ฅ ๊ฐ๋ฅํ๊ฒ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ค
- ๊ทธ๋ผ์๋ ๋ฐฐ์์ผํ๋ค ์?
- ๋ณ๋ ฌ์ฑ๊ณผ ๋์์ฑ์ด ์ข์์ง๋ ์๋๊ฐ ์๋ค.
- ์ฝ์ด๋ฅผ ๋๋ฆฌ๋๊ฒ ๋์ธ๋ค.
- ์ด์ ๋ ์ค๋ ๋๋ฅผ ๋ง๋๋๊ฒ ์ค์ํ๊ฒ ์๋๋ค.
- ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ฌ์ฌ์ฉํ๋๊ฑด ์ด์์ฒด์ ๊ฐ ํด์คํ๋๊น ๊ฐ๋ฐ์๋ค์ ๊ทธ ์ค๋ ๋์ ํด๋นํ๋ ํ์๋ค๊ฐ ํด๋ก์ ๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ๋ง ํด > ํ ๋จ์๋ก ํด๋ก์ ์์ ํ์์ ๊บผ๋ด์ ํด๋ก์ ๋ค์ ์ค๋ ๋์๋ค๊ฐ ๋ถ์ฌ์ ๊ทธ ์ค๋ ๋์ ๋ํด์ ์คํํ๊ณ ๋ ์ฒ๋ฆฌํด์ค๊ฒ.
- ๋ ์์ ํด๋ก์ ๋จ์๋ก ํ์๋ค๊ฐ ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ํด๋ก์ ๋จ์๋ก ๊บผ๋ด์ ์ด๋ค ์ค๋ ๋์์ ๋์ํ๊ฒ ๋ง๋ค์ง๋ฅผ ์ด์ ํด๋ก์ ๋จ์๋ก ์์ ์ค์ผ์ค์์ ๋ง๋ค์ ๋ผ๋๊ฒ ์ปจ์ ์ด๋ค.
- ์ฅ์
[Grand Central Dispatch]
- ์ปค๋ ์์ ๋ฐ๋ก ๋ง๋ค์ด์ ธ ์๋ค.
- ๋งฅ์๋ iOS์์๋ lib ์์คํ ์ด๋ผ๋ ํ๋ ์์ํฌ ์์ ๋ค์ด์๋ค.
- ์ค๋ ๋๋ฅผ ์ ๋ค๋ฃจ๋ ๊ฒ์ด ์ด๋ ต๋๋ผ. ์์ฐ๋ ๋ฐฉ๋ฒ์ ๋ง๋ค์ด๋ณด์ ํด์ ์์ํ๊ฒ ๋์๋ค.
- ์ฝ๋๋ธ๋ญ ๋จ์๋ฅผ ํด๋ก์ ๋ก ๋ฌถ์ด์ ๊ทธ๊ฑฐ๋ฅผ ํ์๋ค ๋ฃ๊ณ ํ๊ฐ ๊ทธ๊ฑฐ๋ฅผ ์คํํ๋ ์ด๋ฐ ๊ตฌ์กฐ๋ก ๋ง๋ค์๋ ์๋
- ํน์ฅ์
- ๋ฐ์์ฑ์ ๊ฐ์
- ๋ค์ด๋๋ฏน ํ์ฅ
- ๋ณด๋ค ๋์ ํ๋ก์ธ์ค ์ฌ์ฉ
- ๊น๋ํ ์ฝ๋
- ์ค๋ ๋๋ฅผ ๋ง์ด ๋ง๋๋๊ฒ ์ข์ ์ผ์ด ์๋๋ค.
- ์ ์ ํ ๊ฐฏ์๋งํผ๋ง cpu ๊ตฌ์กฐ์ ๋ง๊ฒ ์ด์ํ๋๊ฒ ์ข์ํ ๋ฐ, ๊ฐ๋ฐ์๋ค์ด ์ง์ ๊ด๋ฆฌํ๋ ๊ฒ ๋ณด๋ค๋ ์ด์์ฒด์ ๊ฐ cpu ์ํคํ ์ฒ์ ๋ง๊ฒ ์ด์ํ๋๊ฒ ๋ ์ข๋ค ๊ทธ๊ฑธ GCD๊ฐ ํด์ฃผ๊ฒ ๋ค. ๋ผ๋๊ฑฐ๋ค.
- ํ๋ฅผ ์ฌ์ฉํ๋ค.
- ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ๊ตฌ์กฐ๋ ๋์ผํ๋ค.
- ์ด๋ฒคํธ ์์ฑ์ด ๊ฐ๋ฅํด์ง๋ค.
- ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ ๋ฐฉ์์ผ๋กํด์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ ๋ ๊ทธ ์ฒ๋ฆฌ๋ ๊ฐ์ ์์ q์์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
- ๋์คํจ์น ์์ค์ ํด๋นํ๋ ๊ฒ๋ ์๋ค.
- GCD๊ฐ ๊ด๋ฆฌํ๋ Pool์ด ์๋ค.
- ๋ ์ข์ ๊ตฌ์กฐ์์๋ Pool์ด ๋ ๋ง์ ์๋ ์๋ค.
- GCD๋ฅผ ์ฌ์ฉํ๋ฏ๋ก์จ ์ป๋ ์ด์
- ํจ์จ์ฑ
- ์ฝ๋๊ฐ CPU ์ฌ์ดํด์ ๋ ํจ๊ณผ์ ์ผ๋ก
- ๋ ๋์ ํํ
- ์ ์ธํ๊ธฐ ํธํ ํด๋ก์
- ํ๋ก๋์/์ปจ์๋จธ ๊ด๊ณ๋ฅผ ํํํ๋ ํ(Queues)
- ์์คํ
์์ค ๊ด๋ฆฌ
- ์๋ธ ์์คํ ์ ๋ ๋ฆฝ์ ์ผ๋ก OS๊ฐ ๊ด๋ฆฌ
- ๊ธฐ์กด ์ค๋ ๋ ์ฒ๋ฆฌ๋ ๋๊ธฐํ ๋ฐฉ์๊ณผ 100% ํธํ ๊ฐ๋ฅ
- GCD ์ค๋ ๋๋ POSIX ์ค๋ ๋๋ฅผ ํฌ์ฅ
- GCD ์ค๋ ๋๋ฅผ cancel, exit, kill, join, or detach ํ์ง๋ง๋ผ
- GCD ์ค๋ ๋๋ฅผ ์ฌ์ฌ์ฉ
- ํด๋ก์ ๋ด๋ถ์์ ์ค๋ ๋๋ณ ์ํ ๋ณํ๋ฅผ ๋ณต๊ตฌํ๋ผ
- ํจ์จ์ฑ
- ์ค๋ ๋ ์์ฒด๋ GCD๊ฐ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค.
- ์ค๋ ๋ ํด๋์ค ์์
- GCD๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ 2์ค๋ก ์ค์ผ ์ ์๋ค.
- GCD Advantages
- Thread recycling
- ์ค๋ ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ฑ์ด ์ข์์ง๋ค.
- Deferred based on availability
- Thread recycling
- ๋ณดํธํ๊ธฐ Locking
- Enforce mutually exclusive access to critical sections
- Serialize access to shared state between thrads
- Ensure data integrity
- ์ ์ฒ๋ผ lock์ ๋ฃ์ด์ค์ผ ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์ ํ ์ค๋ ๋ ์ธ์ดํ ํจ์๊ฐ ๋๋ค.
- lock์ด ์์ผ๋ฉด ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋๊ฒ ๋ณด์ฅ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ ์๊ฐ ๋์์ ์ธ๋ ค๊ทธ๋ฌ๋ค๊ฐ ์ฑ์ด ๋ฉ์ถ์๋ ์๋ค.
- ๋์์ ์ฐ๋ ค๊ณ ํ๋๋ฐ ํ๋๋ฅผ ์ฐ๊ธฐ์ ์ ๋ค๋ฅธ๊ฒ ๋จผ์ ์จ์ค๊ฐ์ง๊ณ ๊ฐ์ด ๊นจ์ง ์๋ ์๋ค.
- ์ํ๋ ํํ์ด ์๋ ์๋ ์๋ค.
- GCD๋ฅผ ํ์ฉํ๋ค๋ฉด ์๋์ฒ๋ผ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
- ์ ์ฝ๋ ๋ธ๋ญ๋งํผ์ ํ ๋ฉ์ด๋ฆฌ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ค.
- ํ ๋ฉ์ด๋ฆฌ๋ก ํ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ ๋ ์ผ์ด ์๋ค.
- ์ ๋นจ๊ฐ ๋ฐ์ค ์๋ ์ฝ๋๋ฅผ ๋ค ์คํํ ๋ ๊น์ง ๋๊ธฐํ๊ฐ ๋์ ๋ฉ์ถฐ์ ธ ์๋ค. ์คํ์ด ๋๋๊ณ ๋๋ฉด ์๋๋ก ๋ด๋ ค๊ฐ๋ค.
- async๊ฐ ๋๋ฉด ํ์๋ค๊ฐ ๋ฃ๋ ์์ ์ ํ๊ณ ๊ทธ๋ฅ ๋น ์ ธ๋๊ฐ๋ค.
- sync๋ก ํ๋ async๋ก ํ๋ ํด๋ก์ ์์ ์ถฉ๋๋์ง ์๊ณ ๊ฐ๊ฐ์ ํ์ ์๋ ํด๋ก์ ๊ฐ ์์๋๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ์์๊ฐ ๋ณด์ฅ๋๋ค.
- ๋ฐ๋ผ์ Lock์ ์ฐ์ง ์๋๋ผ๋ GCD์์๋ Lock์ ์ฐ๋ ํจ๊ณผ๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
- ํน์ ํ ์๊ฐ ๋ค์ ์ด ์ฝ๋ ๋ธ๋ญ์ ์คํ์์ผ์ฃผ๋ ๊ฒ์ ๋ณด์ฅํด์ค๋ค.
- ํ๋ ์ ๋๋์ด ๋ฐ์ํ ์ ๋๋ก ๋ฉ์ธ์ฐ๋ ๋๊ฐ ๋ฐ์๋ฉด ์ด๊ฒ๋ ๋๋ ์ด๊ฐ ๋์ด ํธ์ถ์ด ๋ฆ์ด์ง ์๋ ์๋ค.
- ํ๋ฉด์ฒ๋ฆฌ๋ฅผ ํ๋๊ฒ ์๋๋ผ๋ฉด ๊ผญ ๋ฉ์ธ์ค๋ ๋์ ๋ฃ์ ํ์์๋ค. ๋ค๋ฅธ ์ฐ๋ ๋์ ๋ฃ์ด๋ ๋๋ค.
- โ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ด๋๊ฐ์์ ์ ์ฝ๋๊ฐ ๋๊ธฐ๋ง ํ๋ฉด ๋ผโ ๊ทธ๋ฌ๋ฉด ๊ธ๋ก๋ฒ ํ์ ๋ฃ์ด์ค ์๋ ์๋ค.
- ํ์ ์ข
๋ฅ
- ๋์์ฑ ํ
- Concurrent Queue Execute multiple blocks at the same time
- Concurrently executed closures may complete out of order
- Queues execute concurrently with respect to other queues
- ์๋ฆฌ์ผ ํ
- Lightweight list of closures
- Enqueue and dequeue are FiFO
- Serial queue execute blocks one at a time
- ๋์์ฑ ํ
- ํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง๋ ฌ์ฑ์ด๋ค.
- ์ง๋ ฌ์ฑ์ผ๋ก ๋ง๋ค๊ฑด์ง ๋์์ฑ์ผ๋ก ๋ง๋ค๊ฑด์ง ์ ํํ ์ ์๋ค.
- ์๋ฌด ์ต์ ์ ์ฃผ์ง์์ผ๋ฉด ์ง๋ ฌํ๋ก ๋ง๋ค์ด์ง๊ณ ๊ธ๋ก๋ฒ ํ๋ก ๋ง๋ค๋ฉด ๋์์ฑ์ผ๋ก ๋ง๋ค์ด์ง๋ค.
- ๋์์ฑ์ ์๋ ํ๋ ํ๊ฐ ์ฌ๋ฌ๊ฐ๋ค.
- DispatchGroup
- ์ฌ๋ฌ์์ ๋ค์ ํ ๋ ๊ทธ ์์ ๋ค์ด ํ๊บผ๋ฒ์ ๊ทธ๋ฃนํํด์ ๋๋์ผ์ง๋ง ๋ค ๋๋ฌ๋ค๋ผ๊ณ ํ๋จํ ๋ ์ฌ์ฉ
- DispatchQoS
- ์ฐ์ ์์๋ฅผ ์ ํ๋ค. ํ ์ค์์๋ ์ด๋ค ์์ ๋ค์ด ๋จผ์ ๋ค์ด๊ฐ์ผ๋ ์ง ๋ง์์ผ ๋ ์ง๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
- DispatchWorkItemFlags
- ์ต์ ๋ค์ ์กฐ์ ํ ์ ์๋ค.
- concurrentPerform?
- ํ์ ๋ฉ์๋
- for๋ฌธ ์ฒ๋ผ ๊ฐ์ ์์ ์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํด์ผํ๋ ๊ฒ๋ค, ํด๋ก์ ๋ฅผ N๋ฒ ์คํํด์ผํ ๋ ์ฌ์ฉํ๋ค.
- Suspending and resuming execution
- func suspend()
- func resume()
- ํ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ํ ์
- ์ผ๋ฐ์ ์ธ ๋ชฉ์ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋๋ค.
- GCD์์ ์ฌ์ฉํ๊ธฐ ์ํ ํ๋ฆ ์ ์ด๋ฅผ ์ํ ๊ฒ์ด๋ค
- ํ์ ๋ธ๋ก์ ํ๋ฒ ์ถ๊ฐํ๋ฉด ๋ฐ๋์ ์คํ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํด์ค๋ค.
- ๋๊ธฐํ sync API๋ฅผ ์ฌ์ฉํ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค.
- Dead lock ์ํ๋ก ๋ฉ์ถฐ๋ฒ๋ฆด ์ ์๋ค.
- ์ทจ์ํ๋ ค๋ฉด DispatchWorkItem ๋๋ OperationQueue
- GCD Design Patterns
- ์ฌ์ด๋ฐฉ๋ฒ
- Dispatch_async()๋ฅผ ์จ๋ผ
- ํ๋ ํ๋ก๋์/์ปจ์๋จธ ๊ตฌ์กฐ๋ก
- ํด๋ก์ ๊ฐ ์์ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ค๋ค.
- ํ๋ ๊ฐ๋ณ๊ณ ํจ์จ์ ์ผ๋ก
- ์ค๋ ๋๊ฐ ์๋์ ์ผ๋ก ์์ฑ๋๊ฑฐ๋ ์ฌ์ฌ์ฉ๋๋ค.
- UI ์ด๋ฒคํธ ์ฃผ๋ ๊ฐ๋ฐ๊ณผ ๋น์ทํจ
- ๋ค๋ฅธ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ํด์ ์ค๋ ๋๋ฅผ ๋ฉ์ถ๊ฑฐ๋ ํด๋งํ์ง ๋ง๋ผ
- ์) ์์ผ๋๊ธฐ, ๋๋ ํ ๋ฆฌ ๋ณํ ๊ฐ์
- ๋์คํจ์น ์์ค ๊ณ ๋ ค
- ์ด์์ฒด์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ํ๊ฑฐ๋ ์์ฒญ์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ฆด ๋
- ์ฌ์ด๋ฐฉ๋ฒ