์จ๋ฐ iOS Concurrency(๋์์ฑ) - ๋์คํจ์นํ์ ์คํผ๋ ์ด์ ํ์ ์ดํด
๋์์ฑ(Concurrency)ํ๋ก๊ทธ๋๋ฐ - iOSํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋๊ธฐ, ๋น๋๊ธฐ์ ๊ฐ๋ ๋ฐ ๊ทธ๋ฅผ ํ์ฅํ GCD ๋ฐ Operation์ ๊ดํ ๋ชจ๋ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค.
์๊ฐ์ 828๋ช
๋์ด๋ ์ด๊ธ
์๊ฐ๊ธฐํ ๋ฌด์ ํ
์ UI๋ฅผ ๋ฉ์ธ์ฐ๋ ๋์์ ์ ๋ฐ์ดํธ ํ ๊น?
์๋ ํ์ธ์. ์ค๋๋ง์ ์์์์ผ๋ก ์ธ์ฌ๋๋ฆฌ๋ค์.
๋ค๋ฆ์ด ์๋์ค๋ผ,
์ UI๋ฅผ ๋ฉ์ธ์ฐ๋ ๋์์ ์ ๋ฐ์ดํธ ํด์ผํ ๊น? ๋ผ๋ ์ง๋ฌธ์ ๋ํ ์ข์ ๊ธ์ด ์์ด, ํด์๋ณธ์ ๋ง๋ค๊ฒ ๋์๊ณ ๊ณต์ ํด ๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค.
ํน์๋ ์ข์ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋์์ผ๋ฉด ํฉ๋๋ค.
(๊ธ์ ์๋ณธ ์ถ์ฒ)
https://medium.com/@duwei199714/ios-why-the-ui-need-to-be-updated-on-main-thread-fd0fef070e7f
(ํด์๋ณธ pdf์๋ฃ)
https://drive.google.com/file/d/1dFw6sJsxV-huK3BoHXgDq-7rXy9yBq9l/view?usp=sharing
๊ฐ๋จํ๊ฒ ์์ฝํด ๋๋ฆฌ์๋ฉด,
1) UIKit์ ๋ชจ๋ ์์ฑ์ Thread-safeํ๊ฒ ์ค๊ณํ๋ฉด, ๋๋ ค์ง๊ณผ ๊ฐ์ ์ฑ๋ฅ์ ํ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ์ค๊ณํ ์ ์๋ค. (Thread-safeํ์ง ์๊ฒ ์ค๊ณํ ๊ฒ์ ์ ํ์ ์๋๋ค.)
2) ๋ฉ์ธ ๋ฐ๋ฃจํ(Runloop)๊ฐ ๋ทฐ์ ์ ๋ฐ์ดํธ๋ฅผ ๊ด๋ฆฌํ๋ View Drawing Cycle์ ํตํด ๋ทฐ๋ฅผ ๋์์ ์ ๋ฐ์ดํธ ํ๋ ๊ทธ๋ฐ ์ค๊ณ๋ฅผ ํตํด ๋์ํ๊ณ ์๋๋ฐ, (๋ฉ์ธ์ฐ๋ ๋๊ฐ ์๋)๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐ๋ ๋๊ฐ ๊ฐ์์ ๋ฐ๋ฃจํ๋ก ๊ทธ๋ฐ ๋์์ ํ๊ฒ๋์์๋, ๋ทฐ๊ฐ ์ ๋ฉ๋๋ก ๋์ํ ์์๋ค. (์๋ฅผ ๋ค์ด, ๊ธฐ๊ธฐ๋ฅผ ํ์ ํ์๋, ๋์์ ๋ทฐ์ ๋ ์ด์์์ด ์ฌ๋ฐฐ์น๋๋ ๊ทธ๋ฐ ๋์์ ๋ชปํ๊ฒ ๋ ์๋ ์๋ค.)
3) iOS๊ฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๋ ๋๋ง ํ๋ก์ธ์ค(์ฝ์ด์ ๋๋ฉ์ด์ -> ๋ ๋์๋ฒ -> GPU -> ํ์)๊ฐ ์๋๋ฐ, ์ฌ๋ฌ ์ฐ๋ ๋์์ ๊ฐ์์ ๋ทฐ์ ๋ณ๊ฒฝ์ฌํญ GPU๋ก ๋ณด๋ด๋ฉด GPU๋ ๊ฐ๊ฐ์ ์ ๋ณด๋ฅผ ๋ค ํด์ํด์ผํ๋ ๋๋ ค์ง๊ฑฐ๋, ๋นํจ์จ์ ์ด ๋ ์ ์๋ค.
4) Texture๋ ComponentKit์ด๋ผ๋ ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ ๋น๋๊ธฐ์ UI ํ๋ ์์ํฌ๊ฐ ์๊ธด ํ์ง๋ง, View Drawing Cycle๊ฐ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ ์ ํ ํ์ด๋ฐ์ ๋ฉ์ธ ์ฐ๋ ๋์์ ๋์์ ์ ๋ฐ์ดํธ ํ๋๋ก ํ๊ณ ์๋ค.
์ด์ ๋ ๋ด์ฉ์ ๋๋ค. ์ฌ์ค, iOS๋ฟ๋ง ์๋๋ผ ์๋์ฐ๋ ๋ค๋ฅธ OS์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฐ ์์ ์ ์ฌํ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋๋ฌธ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ฉ์ธ์ฐ๋ ๋์์๋ง UI์ ๋ฐ์ดํธ๋ฅผ ํ ์ ์๋๋ก ํ๊ณ ์๋ ๊ฒ์ด ์๋๊น, ๋ค์ ์๊ฐํด๋ณด๊ฒ ํ๋ ๊ธ์ด์์ต๋๋ค.
๊ทธ๋ฅ ํ๋ฒ์ฏค ์๊ฐํด ๋ณผ ์ ์๋ ์ฃผ์ ๋ผ.. ์กฐ๊ธ์ ๋์์ด ๋์๊ธธ ๋ฐ๋๋๋ค ^^
๊ฐ์ฌํฉ๋๋ค.







