์ค๋์ ๋ฐฐ์ #116
2022.01.14 ์ค๋์ ๋ฐฐ์
์ค๋ ํ ์ผ.
- ์ค๋ ธ์ฐ ์ฝํ ๋ณด๊ธฐ
- ์ด๋ฒ ์ฃผ์ ๋ฉด์ ๋ณธ ๋ ๊ณณ ๋ฉด์ ๋ณต๊ธฐ
- naljin๋ gcd ํฌ์คํธ ์ญ ๋ค์ ์ฝ์ด๋ณด๊ธฐ - ํญ์ ๋๋ผ์ง๋ง ๊ธ์ ์ง์ง๋ก ์ ์ฐ์ ๋ค.. ๊ฐ๋ฒผ์ด๋ฏํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ๋ชจ๋ ์ ๋ฌํ์ ๋ค. ๋ณธ๋ฐ๊ณ ์ถ์ ํฌ์คํ ์ค๋ ฅ..
- ๋ฉ์ธ ์ค๋ ๋์์ UI๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๋ ์ด์ ์ฝ์ด๋ณด๊ธฐ - ์ฝ๊ฐ ๋ก์ฐ๋ ๋ฒจ ๊ฐ๋ ์ด ์์ฌ์์ด์ ์ฝ์ง๋ ์๋ค.
์ค๋ ์๋ก ๋ฐ๊ฒฌํ ๊ฒ.
- ๋ณด๋ผ์์ผ๋ก ์ค๋ฅ๋จ๋๊ฑด Main Thread Checker๊ฐ ์ก์์ฃผ๋ ๊ฒ์ด์๋ค.. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋๋ฉด ์๋๋ ์์ ์ ์ก์์ฃผ๋ XCode์ ๊ธฐ๋ฅ์ด๋ค.
- ๋ณดํต ๊ฐ์ ํ์์ ๊ฐ์ ํ๋ก sync ๋ฅผ ํธ์ถํ๋ฉด ๋ฐ๋๋ฝ์ด ์ผ์ด๋ ์ ์๋ค๊ณ ์๊ณ ์๋๋ฐ, QoS๋ฅผ ๋ค๋ฅด๊ฒ ์ฃผ๋ฉด QoS๋ง๋ค ์ฌ์ฉํ๋ ์ค๋ ๋๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด์ ๋ฐ๋๋ฝ์ด ์๋๋ค๊ณ ํ๋ค.
- ํด๋ก์ ์์ ํด๋ก์ ์ธ๋ถ์ ์ ๋ณด(self ํฌํจ)์ ์ฌ์ฉํ๋ฉด ๊ฐํ ์ฐธ์กฐ๋ก ์บก์ณ๋๋ค. weak self ์ฐ๋๊ฒ ์ด๊ฑธ ์ฝํ ์ฐธ์กฐ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด๋ค.
- DispatchGroup์ ์ธ ๋, notify๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ ๋ง๊ณ ๋, ๊ทธ๋ฃน์ wait์ ๊ฑธ์ด์ ๊ทธ๋ฃน์ ๋ง๋ ํ์ฌ ์ค๋ ๋๋ฅผ ๋ธ๋ก์ํฌ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ํ์์์์ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ํ์์์์ด ์ธ์๋ก ๋ค์ด๊ฐ๋ฉด wait์ ๋ฐํ ํ์ ์ DispatchTimeoutResult ๊ฐ ๋๋ค. Result ๊ฐ์ฒด์ฒ๋ผ success, failure๋ก ์ ๊ทผํ๊ณ ์ง์ ํ๋ ์๊ฐ์์ ์์ ๋ค์ด ๋ชจ๋ ๋๋๋ฉด success, ๋๋์ง ์์ ์์ ์ด ์์ผ๋ฉด failure๊ฐ ๋ฐํ๋๋ค.
- ์ด๋ wait์ ํธ์ถํ ์ค๋ ๋๊ฐ ๋ธ๋ก๋๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ๋ฉ์ธ ์ค๋ ๋์์๋ ํธ์ถํ๋ฉด ์๋๋ค.
- ๊ทธ๋ฃน ์์ ๋น๋๊ธฐ ์์ ์ด ์์ผ๋ฉด ๊ทธ๋ฅ async์ ํ๋ผ๋ฏธํฐ๋ก group์ ์ฃผ๋ฉด ๋์ง๋ง, ๋น๋๊ธฐ ์์ ์ด ์์ผ๋ฉด ๋น๋๊ธฐ ์์ ์ ์์ํ๊ธฐ ์ ์ enter, ๋๋๋ฉด completion์์ leave๋ฅผ ํธ์ถํด์ ๋ช ์์ ์ผ๋ก group์ ์์ ์ด ๋๋ฌ์์ ์๋ ค์ผํ๋ค.
- DispatchWorkItem์ผ๋ก ์บก์ํํ ์์ ์ async(execute: )์ผ๋ก ์คํํ๊ฑฐ๋, .perform์ผ๋ก ํ์ฌ ์ค๋ ๋์์ syncํ๊ฒ ์คํํ ์ ์๋ค.
- DispatchWorkItem์ cancel์ ํธ์ถํ๋ฉด ์์ ์ด ์์ง ํ์์ ๋๊ธฐ์ค์ผ ๋๋ ์์ ์ด ์ทจ์๋์ง๋ง, ์ด๋ฏธ ์์ํ ์์ ์ ํ๋๊ทธ๋ง ๋ฐ๊พธ๊ณ ์์ ์ด ์ค๋จ๋์ง๋ ์๋๋ค.
- ์์ ๊ฐ์ ์์กด์ฑ์ ๋ง๋ค๋ ค๋ฉด OperationQueue๊ฐ ์ ์ผ ๊น๋ํ๊ธด ํ์ง๋ง, DispatchSemaphore๋ก ์์๋ฅผ ๋ง์ถ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ๋์ ์ด๋ฌ๋ฉด ์ฌ์ค์ ์๋ฆฌ์ผ ํ์ sync๋ก ์์ ์ ๋ณด๋ด๋๊ฑฐ๋ ๋ณ๋ก ๋ค๋ฅผ๊ฒ ์์ ๊ฒ ๊ฐ๋ค.
- ๊ฒฝ์์ํ๋ฅผ ๋ง๊ธฐ ์ํด barrier ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ฐ๊ธฐ์์ ์ barrier๋ก ์์ํด์ ์ฐ๊ธฐ๊ฐ ์ผ์ด๋๋ ๋์์๋ ๋ค๋ฅธ ์ค๋ ๋์์ ์ฐ๊ธฐ์์ ์ด ์ผ์ด๋์ง ์๋๋ก ํ๊ณ , ์ฝ๊ธฐ ์์ ์ ์์ ๋กญ๊ฒ ๊ณต์ ์์์ ์ ๊ทผํ๊ฒ ํ ์ ์๋ค.
- barrier ๋ธ๋ญ์ด ์์๋๋ฉด ๋ค๋ฅธ ์ ๋ค์ด ์์ ์ ๋ฉ์ถ๋๊ฒ ์๋๋ผ, ๊ธฐ์กด์ ์์ ์ค์ด๋ ์ ๋ค์ด ์ข ๋ฃ๋๋ฉด ๊ทธ๋์์ผ barrier๋ฅผ ์ค ๋ธ๋ญ์ ์คํํ๋ค.
- barrier๋ฅผ ์ฐ๋ ค๋ฉด async(flags: .barrier, execute: {Task}) ๋ก ์ฃผ๋ฉด๋๋ค.
-
var name: String { get { self._name } set { concurrentQueue.async(flags: .barrier, execute: { self._name = newValue print(self._name) }) } }
- ๋ฐ๋๋ฝ์ ๋ง์ผ๋ ค๋ฉด ๊ทธ๋ฅ ์๋ฆฌ์ผ ํ๋ฅผ ์ฐ๋ฉด ๋๋ค. ๊ทธ๋ผ ๋ฌด์กฐ๊ฑด ํ๋ฒ์ ํ ์ค๋ ๋๋ง ์คํ๋๋๊น. ๊ทผ๋ฐ ๊ทธ๋ ๋ค๊ณ ๋ฌด์กฐ๊ฑด ์๋ฆฌ์ผ ํ๋ง ์ฐ๋ฉด ์ฑ๋ฅ์ ์ํด๋ฅผ ๋ณด๋๊น ์ค๊ณ๊ฐ ์ ๋์ด์๋์ง ๋ณด๋ฉด์ ์ ์ ํ๊ฒ ๋์ํด์ผํ๋ค.
- Priority Inversion์ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ์คํฌ๊ฐ ์ฐ์ ์์๊ฐ ๋์ ํ์คํฌ๊ฐ ํ์ํ ์์์ ์ ์ ํ๊ฒ ๋๋ฉด์ ์ฐ์ ์์๊ฐ ๋ค์งํ๋ฒ๋ฆฌ๋ ์ํฉ์ ๋งํ๋ค.
- ์ค์ ๋ก๋ ์๋ฆฌ์ผ ํ์์ qos๊ฐ ๋ฎ์ ํ์คํฌ๊ฐ ๋จผ์ ๋ค์ด์จ ๋ค์ qos๊ฐ ๋์ ํ์คํฌ๊ฐ ๋ค์ด์์ ์ฐ์ ์์๊ฐ ์๋ฏธ์์ด์ง๋ ์ํฉ์ด๋, Operation queue์์ qos๊ฐ ๋์ ํ์คํฌ๊ฐ qos๊ฐ ๋ฎ์ ํ์คํฌ์ ์์กด์ฑ์ ๊ฐ์ง๊ฒ ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ ์ ์๋ค.
- low, mid, high ์์ผ๋ก ์์ ์ด ๋์ฐฉํ๊ณ , low๊ฐ high์์ ํ์ํ ์์์ ์ ์ ํ๊ณ ์๋ค๋ฉด, high๊ฐ ์์๋์ด์ CPU๋ฅผ ์ ์ ํ๋ฉด low๊ฐ ๋๋๊ธธ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋๊ธฐํ๊ฒ ๋๊ณ , ๋ค์ ์ฐ์ ์์์ธ mid๊ฐ ๋จผ์ ์คํ๋๊ณ ์ข ๋ฃ๋๋ค. high๋ low๋ณด๋ค ๋ฌด์กฐ๊ฑด ๋ฆ๊ฒ ๋๋์ผํ๊ธฐ ๋๋ฌธ์ mid->low->high ์์ผ๋ก ์์ ์ด ์ฒ๋ฆฌ๋๋ค.
- GCD์์๋ ์ด๊ฑธ ๋ง์ผ๋ ค๊ณ ๊ทธ๋ฅ ์์์ ์ ์ ํ๋ ์ค๋ ๋์ qos๋ฅผ ์์์ ์ผ๋ก ๋์ฌ๋ฒ๋ฆฐ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์๋ ๋๊ฐ์ ํ๊ฒฝ์์๋ high๊ฐ ๋ค์ด์์ low์ ์์์ ์ํด ๋๊ธฐํ ๋, GCD๊ฐ low์ ์ฐ์ ์์๋ฅผ high๋ก ์ฌ๋ ค๋ฒ๋ ค์ ๋จ์ ์์ ์ ๋ค ์ฒ๋ฆฌํ๊ณ , low๊ฐ ๋๋๋ฉด high๊ฐ ์คํ๋๋ฏ๋ก low->high->mid ์์ผ๋ก ์คํ๋์ด์ ์๋ก ์์กด๊ด๊ณ๊ฐ ์๋ high์ mid์ ์ฐ์ ์์๊ฐ ์ญ์ ๋์ง ์๋๋ค.
์ค๋ ๋๋ ๊ฒ.
- ๊ฐ์ฅ ๊ฐ๊ณ ์ถ๋ ๊ธฐ์ ์ ์ต์ข ๋ฉด์ ์ ๋ณด๊ฒ ๋์๋ค. ์ต์ข ์ ๋ณธ๋ค๋ ๊ฒ๋ ์ผ๋จ๋จํ๋ฐ ๋ค์ ๋ CS๋ ํ์ ์ด๋ Rx๋ ์ค๋นํ๊ณ ๋ฉด์ ๊ฐ์ ์ํผํ๊ณก ๋นํ ๊ฑธ ์๊ฐํ๋ ๋๋ฌด๋๋ฌด ๋ฌด์ญ์ง๋ง ๊ทธ๋๋ ์ต์ ์ ๋คํด๋ด์ผ๊ฒ ๋ค.
- ์ค๋ ธ์ฐ ์ฝํ ๋ ์ ๋ ๋ฌธ์ ๊ฐ ์๊ฐํ๋๋ก ๋๋ฌด ์ ํ๋ ค์ ๊ธฐ๋ถ ์ข์๋๋ฐ, ๋ง์ง๋ง ๋ฌธ์ ์์ ์๊ฐ์ ๋๋ฌด ๋ง์ด ์ก์๋จน์ด์ ํด๊ฒฐ์ ๋ชปํ๋คใ ์ด๊ฒ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ ค๋ณด์!
- ๋ฉด์ ์ ๋ณต๊ธฐํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ ์๊ฐ์ "์ ๋ ๋์ ๋๋ต์ด ์์๋๋ฐ ์ ๊ทธ๋ ๊ฒ ๋งํ์ง?"์๋ค.. ํ๋ค๋ณด๋ฉด ์ ์ ๋์์ง๊ฒ ์ง?
- ์ ํ์ ๊ฒฐ๊ณผ๋ค์ด ์กฐ๊ธ์ฉ ๋์ค๋ฉด์ ๊ธด์ฅ์ด ํ๋ ธ๋์ง ์ด์ ์ค๋์ ๊ณ์ ์ ์ ๋ง์ด ์ค๋ค.. ๋ด์ผ๋ถํฐ๋ ๋ค์ ์ง์ค์ ํด๋ณด์!
๋ด์ผ์ ๊ณํ.
- ๋ฉด์ ์ค๋น. ์ด์ ์๊ณ ๋ฆฌ์ฆ ๋ณด๋ ์ ํ์ ๋ค ๋๋์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ์ถ๊ณ ๋ค์ CS, iOS, Rx, ํ์ ์ ๋ฆฌ๋ฅผ ํด์ผํ ๊ฒ ๊ฐ๋ค.
์ค๋์ ๊ฐ์ฌ.
- ์ง์ง๋ก ๋ค ๊ฐ์ฌํฉ๋๋ค! ๋ง์ง๋ง๊น์ง ์ด๋ป๊ฒ ๋๋ ์ง๊ธ๊น์ง์ ๋ ธ๋ ฅ์ ์ด๋ ๊ฒ๋ผ๋ ์ธ์ ๋ฐ๊ฒ ํด์ฃผ์ ์ ๊ฐ์ฌํด์!
'๐ญ ๋ผ-์ดํ > ๐ ํฐ-์์ด-์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋์ ๋ฐฐ์ #118 (0) | 2022.01.17 |
---|---|
์ค๋์ ๋ฐฐ์ #117 (0) | 2022.01.16 |
์ค๋์ ๋ฐฐ์ #115 (0) | 2022.01.12 |
์ค๋์ ๋ฐฐ์ #114 (2) | 2022.01.12 |
์ค๋์ ๋ฐฐ์ #113 (0) | 2022.01.10 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote