์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

์•จ๋Ÿฐ iOS Concurrency(๋™์‹œ์„ฑ) - ๋””์ŠคํŒจ์น˜ํ์™€ ์˜คํผ๋ ˆ์ด์…˜ํ์˜ ์ดํ•ด

๋™์‹œ์„ฑ(Concurrency)ํ”„๋กœ๊ทธ๋ž˜๋ฐ - iOSํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋™๊ธฐ, ๋น„๋™๊ธฐ์˜ ๊ฐœ๋… ๋ฐ ๊ทธ๋ฅผ ํ™•์žฅํ•œ GCD ๋ฐ Operation์— ๊ด€ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

(5.0) ์ˆ˜๊ฐ•ํ‰ 63๊ฐœ

์ˆ˜๊ฐ•์ƒ 828๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์•จ๋Ÿฐ(Allen)๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€

์™œ 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์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ, ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๊ฒŒ ํ•˜๋Š” ๊ธ€์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ํ•œ๋ฒˆ์ฏค ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฃผ์ œ๋ผ.. ์กฐ๊ธˆ์˜ ๋„์›€์ด ๋˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค ^^

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€ 1
    JINSEO PARK๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€

    ์™„๋ฒฝํžˆ ์ดํ•ด๋Š” ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์ข€ ๋” ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋ฅผ ์•Œ๊ฒŒ ๋ผ์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค!

โ‚ฉ66,000