[Swift] GCD(Grand Central Dispatch) - Dispatch Queue
GCD(Grand Central Dispatch)๋ Dispatch Queue๋ ๊ฐ์๊ฑฐ์ผ?
์ด ํฌ์คํธ๋ฅผ ์ค๋นํ๋ฉด์ "์ฐ๋ฆฌ๋ ์ Dispatch Queue๋ฅผ GCD๋ผ๊ณ ํ ๊น?"๋ผ๋ ์๋ฌธ์ด ๋จผ์ ๋ค์์ต๋๋ค. ๊ทธ๋์ ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ GCD์ Dispatch Queue๋ ๋ด์ฉ์ด ๋ค๋ฅด๋๋ผ๊ตฌ์. ๋จผ์ ์ด ๋ถ๋ถ๋ถํฐ ์ ๋ฆฌํ๊ณ Dispatch Queue์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๐กDispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardware in macOS, iOS, watchOS, and tvOS.
๊ณต์๋ฌธ์๋ GCD๋ฅผ ์์ฒ๋ผ ์ค๋ช ํ๊ณ ์์ต๋๋ค. GCD๋ ๋ฉํฐ์ฝ์ด ์์คํ ์์ ๋์์ฑ ์คํ์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์, ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ด๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋์ ์๋ฐํ๊ฒ ๋งํ๋ฉด GCD ์ Dispatch Queue๋ ๋์น๊ฐ ์๋๊ณ , GCD์ ๊ฐ๋ ์ผ๋ก ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ์ค์ํํธ์ API๊ฐ Dispatch Queue์ธ ๊ฒ์ด์ฃ !
๊ทธ๋ผ ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก Dispatch Queue๋ฅผ ๊ณต๋ถํด๋ณผ๊น์?
๋์์ฑ ์คํ? ๊ทธ๊ฑฐ ๋ด๊ฐ ํด์ค๋ค..!
์๋ฐ๋ C๊ฐ์ ์ธ์ด๋ฅผ ์๊ฐํด๋ณด๋ฉด, ์ค๋ ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋ช ์์ ์ผ๋ก ์ค๋ ๋๋ฅผ ๋ง๋ค๊ณ ํด์ผํ ์์ ๋ ํน์ ํ ์ค๋ ๋์ ์ง์ ํด์ฃผ์ด์ผ ํ์ต๋๋ค.
์ด๋ ๊ฒ ๊ฐ๋ฐ์์ ์ฑ ์์ด ๋ง์์ง๋ ๊ตฌ์กฐ์์ฃ . ๊ทธ๋์ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์ ๋ง๋๋ ๊ฒ์ ๋ณต์กํ๊ณ ์ด๋ ค์ด ์ผ์ด์์ต๋๋ค. ๋ฆฌ์์ค ๊ด๋ฆฌ๋ ์ง์ ํด์ฃผ์ด์ผํ๊ตฌ์.
ํ์ง๋ง Dispatch Queue๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ๋ฐ์๊ฐ ํ ์ผ์ ํ๋๋ก ์ค์ด๋ญ๋๋ค. ์์ ์ ์ ์ํด์ Dispatch Queue์ ๋ฃ์ด์ฃผ๋ ์ผ์ด์ฃ . ์ด์์ฒด์ ๋ Dispatch Queue์ ์๋ ์์ ๋ค์ ์ ์ ํ ์ค๋ ๋์ ํ ๋นํ๊ฒ ๋ฉ๋๋ค. ์ด ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ์์ ์ด ๋ฑ๋กํ ์์ ์ด ์ด๋ค ์ค๋ ๋์์ ์คํ๋ ์ง ์ ์ ์์ฃ .
์ฌ์ค ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ค ์ ์๋ ์ต์ ๋ค์ด ๋ช๊ฐ์ง ๋ ์์ต๋๋ค. ์ด๋ค๊ฑธ ์ค์ ํด์ค ์ ์๋์ง ์์๋ณด๊ธฐ ์ํด์ ๋จผ์ ๊ธฐ๋ณธ์ ์ธ Dispatch Queue์ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ด ์๋ค!
Dispatch Queue ์ฌ์ฉํ๊ธฐ
DispatchQueue๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ํ์ ์ข ๋ฅ, qos ์ฐ์ ์์, sync, async๋ฅผ ์ค์ ํด์ ์ง์ ํ ์์ ์ DispatchQueue๋ฅผ ํตํด ํ์ฌ ์ค๋ ๋, ํน์ ๋ค๋ฅธ ์ค๋ ๋์์ ์คํ๋๋๋ก ํ ์ ์์ต๋๋ค.
Serial vs. Concurrent
์ฌ๋ฌ๊ฐ์ง ์ต์ ๋ค์ ์์๋ณด๊ธฐ์ ์, Dispatch Queue๊ฐ ๊ฐ์ง ์ ์๋ ๋ ํน์ฑ์ ๋ํด ๋จผ์ ์ ๋ฆฌํด๋ณด๊ณ์ต๋๋ค.
๋จผ์ Serial์ ํ์ ๋ฑ๋ก๋ ์์ ์ ํ ๋ฒ์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋๋ฉด ๊ฒฐ๊ณผ๋ ํญ์ 0, 1, 2, 3, 4 ์์๊ฐ ๋ณด์ฅ๋๋๋ฐ์, ๊ทธ ์ด์ ๊ฐ Serial ํ๋ก ๋ง๋ค์ด์ง Dispatch Queue์ด๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋ค์ด์จ ์์ ์ด ์๋ฃ๋์ด์ผ ํ์ ์๋ ๋ค์ ์์ ์ ์์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ ๊ฒ ํ ์์ ์ด ๋๋ ๋๊น์ง ํ์ ์๋ ๋ค๋ฅธ ์์ ์ ๊ฑด๋๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ ์คํ์ ์์๊ฐ ์ธ์ ๋ ๊ฐ์ต๋๋ค.
๋ฐ๋ฉด์ concurrent ํ๋ ์ด๋ฆ์ด ๋ํ๋ด๋ ๊ฒ ์ฒ๋ผ ๋์์ ์ฌ๋ฌ์์ ์ด ์ํ๋ ์ ์๊ฒํฉ๋๋ค. ์ด์์ฒด์ ๋ Dispatch Queue์์ ๊บผ๋ด์จ ํ์ฌ ์์ ์ด ๋๋์ง ์์๋ ๋ค์์์ ์ ๋ค๋ฅธ ์ค๋ ๋์ ํ ๋นํด์ ๋์์ ์ฌ๋ฌ ์์ ์ด ์คํ๋๋๋กํฉ๋๋ค.
๊ทธ๋์ ์ด๋ ๊ฒ Dispatch Queue๋ฅผ concurrent๋ก ๋ง๋ค์ด์ ์คํํ๋ฉด,
์ด๋ ๊ฒ ๋งค๋ฒ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค. ๊ฐ ์ค๋ ๋์์ ์์ ์ด ๋๋๋๋๋ก ์ถ๋ ฅ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฒ์๋ ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด์ฃ !
์ค์ ๋ก๋ ๋น์ฐํ ๋ ๋ง์ ์ค๋ ๋๊ฐ ์์ด์ ๋ชจ๋ ์์ ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ฒ ์ง๋ง ๊ฐ๋ ์ ์ผ๋ก๋ ์ด๋ ๊ฒ ํ ์์ ์ด ๋๋์ง ์์๋ ๋์์ ์ฌ๋ฌ ์์ ์ ์ค๋ ๋์ ํ ๋นํฉ๋๋ค.
Main Queue, Global Queue, Custom Queue
Dispatch Queue๋ฅผ ์ฌ์ฉํ ๋ ์ฐ๋ฆฌ๋ ์ธ ์ข ๋ฅ์ ํ๋ฅผ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Main Queue
Main Queue๋ ์ด๋ฆ ๊ทธ๋๋ก ๋ฉ์ธ ์ค๋ ๋์์ ์์ ์ ๋ณด๊ดํ๊ณ ์ํํ๋ ํ์ ๋๋ค. Main Queue๋ ๋ฉ์ธ ์ค๋ ๋์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋จ ํ๋๋ง ์กด์ฌํ ์ ์๊ณ , Serial ํน์ฑ์ ๊ฐ์ง๊ณ ์์ฃ . ์ฆ, ํ์ ์์ด๋ ์์ ์ ์์ฐจ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ฉ์ธ ์ค๋ ๋๋ ์ฑ๊ณผ ํจ๊ป ์์ฑ๋๋ฉด์ ์์ฃผ ์ค์ํ ์๋ฌด๋ฅผ ๋ถ์ฌ๋ฐ๋๋ฐ์, ๋ฐ๋ก UI์ ์ ๋ฐ์ดํธ ์ ๋๋ค.
ํ๋ฉด ์์ ๋ณด์ฌ์ง๋ ์ฑ ์์๋ค์ ๋ชจ๋ ๋ฉ์ธ ์ค๋ ๋์์ ๊ทธ๋ฆฌ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ UI์ ๋ฐ์ดํธ์ ๊ด๋ จ๋ ๋ชจ๋ ์์ ์ ๋ค๋ฅธ ํ๊ฐ ์๋ Main Queue์ ํ ๋น๋์ด์ผ ํฉ๋๋ค.
์์์ ์ฌ์ฉํ๋ ์์ ๋ฅผ Main Queue๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ก ๋ณ๊ฒฝํด๋ณด๋ฉด ์ด๋ ๊ฒ ์ธ ์ ์์ต๋๋ค. ์ ์ผ ์ฒ์์ ๋ณด์๋ ๋ผ๋ ์ฝ๋์์ ํ ์ข ๋ฅ๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ์ main์ ๋ฃ์ด์ฃผ๋ฉด๋ฉ๋๋ค. ์ด ์ฝ๋๋ฅผ ์คํํด๋ณด๋ฉด, Main Queue๋ Serialํ๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ 0, 1, 2, 3, 4๋ฅผ ์์๋๋ก ์ถ๋ ฅํฉ๋๋ค.
Global Queue
Global Queue๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ๋ค๋ฅธ ์ค๋ ๋์์ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์์ concurrent ํน์ฑ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ค๋ ๋๋ก ์์ ์ด ๋ถ์ฐ๋์ด ๋์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
Global Queue๋ ์ฝ๋๋ก ์ด๋ ๊ฒ ์์ฑํ ์ ์๊ณ , ์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ concurrent ํน์ฑ์ ๋ฐ๋ผ ํญ์ ๊ฐ์ ์์์ ์ถ๋ ฅ์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค.
Custom Queue
Custom Queue๋ ์ฌ์ฉ์๊ฐ ์ด๋ค ํน์ฑ์ ํ๋ก Dispatch Queue๋ฅผ ์์ฑํ ์ง ๊ฒฐ์ ํ ์ ์๋๋ก ํด์ค๋๋ค. ๊ธฐ๋ณธ๊ฐ์ผ๋ก๋ Serial์ ๊ฐ์ง๊ณ ์์ง๋ง, ์์ฑ์์ attributes ์ธ์๋ฅผ ํตํด concurrent๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ฃ .
์ด๋ ๊ฒ DispatchQueue๋ฅผ ์์ฑํ๋ฉด์ ๋ผ๋ฒจ์ ์ฃผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ธ Serial ํน์ฑ์ ๊ฐ์ง๋ ํ๊ฐ ์์ฑ๋๊ณ ,
์ธ์๋ฅผ ํ๋ ์ถ๊ฐํ๋ฉด concurrent๋ก๋ ๋ง๋ค ์ ์์ต๋๋ค.
Quality of Service - QOS
์ฌ์ค Custom Dispatch Queue์ Global Dispatch Queue์๋ ์ ์ฉํ ์ ์๋ ์ต์ ์ด ํ๋ ๋ ์๋๋ฐ์, ๋ฐ๋ก qos ๋ก ๋ถ๋ฆฌ๋ quality of service ์ ๋๋ค. Concurrent ํ๊ฒ ์์ ์ด ๋ถ์ฐ๋์ด ์คํ๋ ๋, ์ด๋ค ์์ ์ ์ค์๋๋ฅผ ์ค์ ํด์ ์คํ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ ์ ์์ต๋๋ค. ์ฐ์ ์์๊ฐ ๋ ๋์ ํ๋ ๋ ๋ง์ ์ค๋ ๋์ ์์ ์ ๋ถ์ฐ์ํค๊ณ , ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ ์๋์ ์ผ๋ก ์ ์ ์ค๋ ๋์ ์์ ์ ๋ถ์ฐ์ํต๋๋ค.
qos์ ์ข ๋ฅ๋ ์ด 5๊ฐ์ง๊ฐ ์์ด์!
- userInteractive: ๊ฐ์ฅ ๋์! ์ฌ์ฉ์์ ์ง์ ์ํธ์์ฉ์ ํ๋ ์์ ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ ์์ฒญ์ ๊ณง๋ฐ๋ก ์๋ต์ด ์์ด์ผํฉ๋๋ค. ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌ, ์ด๋ฒคํธ ์ฒ๋ฆฌ, UI ์ ๋ฐ์ดํธ ๋ฑ์ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง์ฃ .
- userInitiated: ์ฌ์ฉ์๊ฐ ์ด๋ค ์์ฒญ์ ํ์ ๋ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ณง๋ฐ๋ก ๋ฐ์์ผํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๊ฐ์ ์ผ๋ก ๋ง๊ธฐ ์ํ ๊ฒฝ์ฐ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ด๋ฉ์ผ ๋ด์ฉ์ ๋ก๋ํ ๋, ์ด qos๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- default: ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ผ๋ฐ์ ์ธ ์์ ์ ๊ฒฝ์ฐ์ ๋๋ค.
- utility: ์ฌ์ฉ์๊ฐ ์ฑ์ ๊ณ์ ์ฌ์ฉํ์ง ์๋๋ก ๋ง์ง ์๋ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ด qos๋ ์ฌ์ฉ์์ ์ํธ์์ฉํ์ง ์์ผ๋ฉด์ ์ค๋์๊ฐ๋์ ์ด๋ค ์์ ์ ์งํํด์ผํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- background: ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ qos์ด๊ณ , ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ์ค์ผ ๋ ์งํํ๋ ์์ ์ ์ด qos๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Sync vs. Async
๋ง์ง๋ง์ผ๋ก Sync ์ Async๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค! Sync๋ ํ์ ์์ ์ ๋ฑ๋กํ ์ดํ์ ํด๋น ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋ ์ด์ ์ฝ๋๋ฅผ ์งํํ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ๊ณ , Async๋ ํ์ ์์ ์ ๋ฑ๋กํ๋ฉด ์์ ์ ์๋ฃ์ฌ๋ถ์ ์๊ด์์ด ๊ณ์ ์ฝ๋๋ฅผ ์คํ์ํค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
serial, concurrent์์ ๋์์ฑ์ ๋ํด ๋ค๋ฃจ์๋๋ฐ, ๊ฐ์๊ธฐ ๋๊ธฐ, ๋น๋๊ธฐ๊ฐ ๋์ค๋๊น ํท๊ฐ๋ฆฌ์์ฃ ? Sync, Async๋ Dispatch Queue์ ์์ ์ ๋ฑ๋กํ๋ ์ฃผ์ฒด์ ๋ํ ์ค์ ์ ๋๋ค. concurrent, serial์ ์ด๋ฏธ ํ์ ๋ค์ด์จ ์์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ ๋ํ ์ค์ ์ด์์ฃ . ๊ทธ๋์ sync / async, serial / concurrent๋ฅผ ๋ชจ๋ ์กฐํฉํ ์ ์์ต๋๋ค.
ํ๋์ฉ ์ง์ ํด๋ด ์๋ค!
Sync + Serial
๋จผ์ Sync์ Serial์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค. Sync๋ก ์ค์ ํ์ผ๋ ์ฝ๋๊ฐ ์คํ๋ ๋ Serial Dispatch Queue์ ์์ ์ ํ๋ ๋ฑ๋กํ๋ฉด, ํด๋น ์์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ์ฃ ? ๊ทธ๋ฆฌ๊ณ Dispatch Queue ์ชฝ์์๋ ๋ฉ์ธ ์ค๋ ๋๋ก ํด๋น ์์ ์ ๋ณด๋ด ์ฒ๋ฆฌํ๋๋ก ํ ๊ฒ์ ๋๋ค.
์ฝ๋๋ก๋
์ด๋ ๊ฒ ํํํ ์ ์๊ณ , ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ณด๋ฉด
์ด๋ ๊ฒ ์งํ์ด ๋๊ฒ ์ฃ ? ๊ฒฐ๊ตญ ํ์๋ ํ ๋ฒ์ ํ๋์ ์์ ๋ง ๋ค์ด๊ฐ๊ณ , ์ด ์์ ์ ํญ์ ๋ฉ์ธ์ค๋ ๋์์ ์คํ๋ฉ๋๋ค.
๋ฉ์ธ ์ค๋ ๋์์ main.sync ๋ฉ์ถฐ!
์ ์์์์๋ Custom Queue๋ฅผ ์ง์ ๋ง๋ค์ด์ ์ฌ์ฉํ๋๋ฐ์, Serial ํน์ฑ์ ๊ฐ์ง๋ Main Dispatch Queue๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด๋ ๊ฒ ์๋ฌ๊ฐ ๋๊ณ ๋ง๋๋ค. ๊ทธ ์ด์ ๋ Serial Queue์ ๋ฉ์ธ์ค๋ ๋์ ์๋๋ฐ์, Main DispatchQueue์์ sync๋ฅผ ํธ์ถํ๋ฉด ๋ฉ์ธ ์ค๋ ๋๋ ๊ทธ๋๋ก ์งํ์ ๋ฉ์ถ๊ณ ๋ฑ๋กํ ์์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์์ ํ์ ๋ฑ๋ก๋ ์์ ์ ๋ฉ์ธ์ค๋ ๋๋ก ํ ๋น๋์ฃ . ํ์ง๋ง ๋ฉ์ธ ์ค๋ ๋๋ ์ด๋ฏธ ์๋ฌด๊ฒ๋ ํ ์ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ด ๋๋ฌธ์ ํ์ ๋ฑ๋ก๋ ์์ ์ ์์์ด ๋์ง ๋ชปํ๊ณ ์์ํ ์คํ๋์ง๋, ์์ ์ด ๋๋์ง๋ ์๋ ๋ฐ๋๋ฝ ์ํ์ ๋น ์ง๊ฒ ๋ฉ๋๋ค.
๊ฐ์ ํ์์ sync ๋ฉ์ถฐ!
ํ ๊ฐ์ง ์กฐ์ฌํด์ผํ ๋ถ๋ถ์ด ๋ ์์ต๋๋ค. ๊ฐ์ ํ์์ ๊ฐ์ ํ๋ก sync๋ฅผ ๋ณด๋ด๋ ์ํฉ์ ๋๋ค.
main.sync๋ฅผ ํผํด์ผํ๋ ์ด์ ๋ฅผ ์ดํดํ๋ค๋ฉด, ์ด ์ฝ๋์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์ดํดํ๊ธฐ ํธํ ํ ๋ฐ์, ๊ฐ์ ํ์์ ์์ ์ ๋ฑ๋กํ๊ณ , ํด๋น ์์ ์ ๋์ผ ํ์ sync๋ก ๋ฑ๋กํ๊ฒ ๋๋ฉด ํญ์ ๊ทธ๋ ์ง๋ ์์ง๋ง ์๋ชปํ๋ฉด ๊ฐ์ ์ค๋ ๋์ ๋ค์ํ๋ฒ ์์ ์ ํ ๋นํ๊ฒ ๋ ์๋ ์์ต๋๋ค.
์ธ๋ถ Dispatch Queue๊ฐ ์ค๋ ๋1์ ๋ด๋ถ Dispatch Queue๋ฅผ ์คํํ๋ ์์ ์ ๋ฑ๋กํ์ ๋, ํด๋น ์ค๋ ๋1์์ sync๋ก print(numbers[index])๋ฅผ ํ์ ๋ฑ๋กํ๊ณ , ์ด์์ฒด์ ๊ฐ ๋ฑ๋ก๋ ์ถ๋ ฅ์์ ์ ๋ค์ ์ค๋ ๋1์ ํ ๋นํ๋ฉด sync๋ ์ค๋ ๋1์ ์๋ฌด์์ ๋ ํ์ง ๋ชปํ๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ฒ๋ฉ๋๋ค.
Serial + Async
serial + async๋ ์์ ์ ๋ฑ๋ก์ ์์ ์๋ฃ์ฌ๋ถ์ ์๊ด์์ด ๊ณ์ ์งํํ๊ณ , ์์ ์ ์ํ์ ์์ฐจ์ ์ผ๋ก ์งํํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋๋ ์๋์ฒ๋ผ ์์ฑํ ์ ์๊ณ ,
๊ทธ๋ฆผ์ผ๋ก ์ ๋ฆฌํด๋ณด๋ฉด
์ด๋ ๊ฒ ๋ชจ๋ ์์ ๋ค์ด ์์ ์ ๊ฒฐ๊ณผ์ ์๊ด์์ด ํ์ ๋ฑ๋ก๋๊ณ , ์์ ์ ํ์์ ํ๋์ฉ ๊บผ๋ด์ ๋ฉ์ธ์ค๋ ๋์์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ ์์ ๋ค์ ๋ฑ๋ก์์์ ์ถ๋ ฅ์์๊ฐ ์ผ์นํฉ๋๋ค.
Concurrent + Sync
Concurrent+Sync์์๋ ์์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐํ๋ฉด์, ํ์ ๋ฑ๋ก๋๋ ์์ ๋ค์ ์ฌ๋ฌ ์ค๋ ๋์ ๋ถ์ฐ๋์ด ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์คํ๋๋ฉด concurrent ํน์ฑ์ ๊ฐ์ง queue์ด์ง๋ง, ์์ ์ sync๋ก ๋ฑ๋กํ๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ฑ๋ก ์์์ ์ถ๋ ฅ ์์๊ฐ ํญ์ ์ผ์นํ๊ฒ ๋ฉ๋๋ค.
Concurrent + Async
๋ง์ง๋ง์ผ๋ก Concurrent + Async๋ ์์ ์ ์๋ฃ ์ฌ๋ถ์ ์๊ด์์ด ๊ณ์ ๋ฑ๋กํ๊ณ , ๋ฑ๋ก๋ ์์ ๋ค์ ์ค๋ ๋์ ๋ถ์ฐ๋์ด์ ๋์์ ์คํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฑ๋ก์์์ ์ถ๋ ฅ์์๊ฐ ํญ์ ์ผ์นํ์ง๋ ์์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ GCD์ Dispatch Queue์ ๋ํด์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค! main.sync์ ์ด์ ๋ qos์ ๋ํด ๋ ํ์คํ๊ฒ ์ ๋ฆฌํ ์ ์์ด์ ์๋ฏธ๊ฐ ์์๋ ๊ฒ ๊ฐ์์! ์๋ชป๋ ๋ด์ฉ์ด๋ ์๋ฃ๊ฐ ์๋ค๋ฉด ์๋ ค์ฃผ์ธ์! ์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :)
'๐ ์์ด-์ค-์์ค > ๐ค ์ค์ํํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote