ํฐ์คํ ๋ฆฌ ๋ทฐ
[iOS/Swift] ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ - GCD์ ์ข ๋ฅ ์์๋ณด๊ธฐ
Neoguri๐ฆ 2023. 1. 2. 23:22
์๋ ํ์ธ์?
๋๊ตฌ๋ฆฌ์ ๋๋ค.
์ ๋ฒ ํฌ์คํ ์ ์ด์ด
GCD์ ์ข ๋ฅ ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋ฐ๋ฅธ ํน์ฑ๋ ๊ฐ์ด ์์๋ณด๊ฒ ์ต๋๋ค!
DispatchQueue์ ์ข ๋ฅ๋ ํฌ๊ฒ
(global)main queue, global queue, custom queue๊ฐ ์๋ค.
ํ๋ค์ ์ข ๋ฅ์ ๋ฐ๋ผ ํน์ฑ์ด ๋ค๋ฅด๊ธฐ๋๋ฌธ์
์ฐ๋ฆฌ๊ฐ ๊ทธ ํน์ฑ์ ๋ง๊ฒ task๋ฅผ ๋ฐฐ๋นํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฐจ๋ก๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
(global)main queue
์ฐ๋ฆฌ๊ฐ ํ์์ ์ฌ์ฉํ๊ณ ์๋ ํ ์ ๋๋ค!
๋ฐ๋ก main thread๊ฐ main queue์ธ ๊ฒ์ ๋๋ค!
main thread๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
thread๊ฐ 1๊ฐ์ด๊ณ , ์ฌ๋ฌ thread๋ก ์ผ์ ๋๋์ด ์ค ์ ์๊ฒ ์ฃ ?
๊ทธ๋์ Serial ํน์ฑ์ ๊ฐ์ง๋๋ค.
์ฝ๋๋ก ์ฌ์ฉํ ๋์๋
DispatchQueue.main.async {
// task 1
}
์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด๊ฒ ๊ตฌ์
์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ print๋ฌธ์
// DispatchQueue.main.sync {
print("์ํด ๋ณต ๋ง์ด ๋ฐ์ผ์ธ์")
// }
์ด๋ฐ ์๋ฏธ๊ฐ ์จ์ด์ ธ ์์๋๊ฒ์ด์ฃ ใ ใ
๋ฌผ๋ก ์ค์ ๋ก main ํ์ sync ํน์ฑ์ ์ถ๊ฐํ๋ฉด
์๋ฌ๊ฐ ๋๊ฒ ๋๋๋ฐ ๊ทธ ์ด์ ๋ ์ถํ ํฌ์คํ ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค!!
global queue
global queue๋ ์ข ๋ฅ๊ฐ ์ด 6๊ฐ์ง์ด๊ณ , ๊ธฐ๋ณธ์ค์ ์ Concurrent์ ๋๋ค!
์ข ๋ฅ๋ QoS๋ฅผ ํตํด ๋ถ๋ฅ๋๊ฒ ๋ฉ๋๋ค!
QoS๋ ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค.

๊ณต์๋ฌธ์๋ฅผ ํตํด ์์๋ณด๋ฉด
QoS๋ Quality-of-service์ด๊ณ ๋ฆฌ์์ค๋ฅผ
๋์ ์ฐ์ ์์ QoS๋ฅผ ๋ถ์ฌ ๋ฐ์ผ๋ฉด task๋ฅผ ๋์ ์์๋ก ์ฒ๋ฆฌํ๋ thread๋ฅผ ๋ฐฐ์ ํ์ฌ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ
๋ฎ์ ์ฐ์ ์์ QoS๋ฅผ ๋ถ์ฌ ๋ฐ์ผ๋ฉด task๋ฅผ ๋ฎ์ ์์๋ก ์ฒ๋ฆฌํ๋ thread์ ๋ฐฐ์ ํ์ฌ ๋น๊ต์ ์ฒ์ฒํ ์ฒ๋ฆฌํ๊ณ
๋ฐฐํฐ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค!
๊ทธ๋ผ QoS์ ์ข ๋ฅ๋ ์์๋ณด๊ฒ ์ต๋๋ค!


์ด๋ ๊ฒ ์ ๋ฆฌํ ์ ์๊ฒ ์ต๋๋คใ ใ
์ฝ๋๋ก๋ ์ด๋ป๊ฒ ์ฌ์ฉํด ๋ณผ๊ฒ์!
์๊น ๊ณต์๋ฌธ์๋ก ๋ณด์๋ฉด QoS๊ฐ enum์ผ๋ก ๋์ด์์์ฃ ?
let userInteractiveQueue = DispatchQueue.global(qos: .userInteractive)
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
let defaultQueue = DispatchQueue.global() // ๋ํดํธ ๊ธ๋ก๋ฒํ
let utilityQueue = DispatchQueue.global(qos: .utility)
let backgroundQueue = DispatchQueue.global(qos: .background)
let unspecifiedQueue = DispatchQueue.global(qos: .unspecified)
์๋ฐ ํํ๋ก ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค!
custom queue
custom queue๋ ๋ง ๊ทธ๋๋ก
์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ ํ์ธ๋ฐ์
๋ํดํธ ์ค์ ์ผ๋ก Serial ์ฑ์ง์ ๊ฐ์ง๊ณ ์๊ณ concurrent๋ก๋ ์ค์ ํด ์ค ์ ์์ต๋๋ค.
์ฝ๋๋ก ๋ง๋๋ ๋ฒ์ ์์๋ณผ๊ฒ์!
let privateQueue = DispatchQueue(label: "neoguri1")
let prinvateConcurrentQueue = DispatchQueue(label: "neoguri2", attributes: .concurrent)
label์ ์ฌ์ฉํด์ ์ด๋ฆ์ ์ง์ด์ค ์ ์๊ณ
attribute๋ฅผ ํตํด ํ์ ์ฑ์ง์ ์ ํด์ค ์ ์์ต๋๋ค!
QoS๋ OS์์ ์๋์ผ๋ก ์ถ๋ก ํ๊ฒ ๋ฉ๋๋ค!
๊ธ ์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋คใ ใ ใ
์ถ์ฒ : https://www.kodeco.com/5370-grand-central-dispatch-tutorial-for-swift-4-part-1-2
Grand Central Dispatch Tutorial for Swift 4: Part 1/2
Learn all about multithreading, dispatch queues, and concurrency in the first part of this Swift 4 tutorial on Grand Central Dispatch.
www.kodeco.com
์ถ์ฒ : https://developer.apple.com/documentation/dispatch/dispatchqos/qosclass
Apple Developer Documentation
developer.apple.com
์ถ์ฒ : https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard
iOS Concurrency(๋์์ฑ) ํ๋ก๊ทธ๋๋ฐ, ๋๊ธฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ทธ๋ฆฌ๊ณ GCD/Operation - ๋์คํจ์นํ์ ์คํผ๋ ์ด์
๋์์ฑ(Concurrency)ํ๋ก๊ทธ๋๋ฐ - iOSํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋๊ธฐ, ๋น๋๊ธฐ์ ๊ฐ๋ ๋ฐ ๊ทธ๋ฅผ ํ์ฅํ GCD ๋ฐ Operation์ ๊ดํ ๋ชจ๋ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- ์ค์ํํธ map
- set
- Swift Network
- Property
- ios
- swift
- func
- swift ๊ณต๋ถ
- ์คํ ๋ ์ด์์
- ์ค์ํํธ
- Unit Test
- RX
- RxSwift
- XCTest
- ํ๋กํผํฐ
- swift ํ๋กํ ์ฝ
- Clean
- swift urlsession
- test
- xcode
- Protocol
- ์ค์ํํธ ๊ณต๋ถ
- ํ ์คํธ
- observable
- network
- URLSession
- ๊ณต๋ถ
- ํ๋กํ ์ฝ
- ์ค์ํํธ ํ๋กํ ์ฝ
- autolayout
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |