๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS

[iOS] iOS Concurrency - 2. ๋””์ŠคํŒจ์น˜ ํ์˜ ์ข…๋ฅ˜์™€ ํŠน์„ฑ

by lizzydev 2023. 3. 5.

ํ์˜ ์ข…๋ฅ˜

(๋Œ€๊ธฐ์—ด์˜ ์ข…๋ฅ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋Š” ๋œป, ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ, ์ž‘์—…์— ๋”ฐ๋ผ ์›ํ•˜๋Š” ํ๋กœ ๋ณด๋‚ด๊ธฐ)

  • ๋””์ŠคํŒจ์น˜ํ(Dispatch Queue)
    1. (๊ธ€๋กœ๋ฒŒ) ๋ฉ”์ธ ๋””์ŠคํŒจ์น˜ํ
    2. ๊ธ€๋กœ๋ฒŒ ๋””์ŠคํŒจ์น˜ํ
    3. ํ”„๋ผ์ด๋น—(์ปค์Šคํ…€) ๋””์ŠคํŒจ์น˜ํ
  • ์˜คํผ๋ ˆ์ด์…˜ํ(Operation Queue)

์›ํ•˜๋Š” ํ๋กœ ์ž‘์—…์„ ๋ณด๋‚ด๋ฉด ๊ฐ ํ๊ฐ€ ์•Œ์•„์„œ ๊ฐ์ž ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค!

1. ๋ฉ”์ธ ๋””์ŠคํŒจ์น˜ ํ

  • ์œ ์ผํ•œ ํ•œ๊ฐœ
  • ์ง๋ ฌ(Serial) ๋™์ž‘
  • ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ ( 1๋ฒˆ ์“ฐ๋ ˆ๋“œ๋Š” ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ์ด์ž ๋ฉ”์ธํ์ด๋‹ค.)

DispatchQueue.main.async

๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ๋กœ ๋ณด๋‚ธ๋‹ค๋Š” ๋œป

 

๊ทธ๋ƒฅ print(”print something”)์ฝ”๋“œ๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์‹ค ์˜๋ฏธ์ ์œผ๋กœ๋Š” DispatchQueue.main.sync ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜๋ฏธ์ด๋‹ค.

( ํ•˜์ง€๋งŒ ์ง„์งœ ์ด๋ ‡๊ฒŒ ์ง์ ‘์จ์„œ ์•ˆ์— ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๋‚จ→๋‹ค์Œ์— ์„ค๋ช… )

 

2. ๊ธ€๋กœ๋ฒŒ ๋””์ŠคํŒจ์น˜ ํ

  • QoS(Quality of Service)์— ๋”ฐ๋ผ ์—ฌ์„ฏ๊ฐ€์ง€๋กœ ๋‚˜๋‰จ
  • ๊ธฐ๋ณธ ์„ค์ •์€ Concurrent(์—ฌ๋Ÿฌ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ ๋ถ„์‚ฐ์ฒ˜๋ฆฌํ•ด์„œ ์ผ์„ ์ฒ˜๋ฆฌ ํ•จ)

DispatchQueue.global().async

 

์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ๊ฐˆ์ˆ˜๋ก ๋œ ์ค‘์š”ํ•œ ์ผ

  1. DispatchQueue.global(qos: .userInteractive) : ์œ ์ €์™€ ์ง์ ‘์  ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ(UI์—…๋ฐ์ดํŠธ, ์• ๋‹ˆ๋ฉ”์ด์…˜, UI๋ฐ˜์‘ ๊ด€๋ จ ์–ด๋–ค ๊ฒƒ์ด๋“ (์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉ)), ๊ฑฐ์˜ ์ฆ‰์‹œ
  2. DispatchQueue.global(qos: .userInitiated) : ์œ ์ €๊ฐ€ ์ฆ‰์‹œ ํ•„์š”๋กœ ํ•˜๊ธด ํ•˜์ง€๋งŒ, ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋œ ์ž‘์—…(ex. ์•ฑ๋‚ด์—์„œ pdf๋ฅผ ์—ฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€), ๋ช‡ ์ดˆ
  3. DispatchQueue.global() : ๋””ํดํŠธ, ์ผ๋ฐ˜์ ์ธ ์ž‘์—…
  4. DispatchQueue.global(qos: .utility) : ๋ณดํ†ต Progress Indicator์™€ ํ•จ๊ป˜ ๊ธธ๊ฒŒ ์‹คํ–‰๋˜๋Š” ์ž‘์—…, ๊ณ„์‚ฐ, IO, Networking, ์ง€์†์ ์ธ ๋ฐ์ดํ„ฐ feeds, ๋ช‡์ดˆ์—์„œ ๋ช‡๋ถ„
  5. DispatchQueue.global(qos: .background): ์œ ์ €๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์ธ์ง€ํ•˜์ง€ ์•Š๊ณ (์‹œ๊ฐ„์ด ์•ˆ์ค‘์š”ํ•œ) ์ž‘์—…, ๋ฐ์ดํ„ฐ ๋ฏธ๋ฆฌ๊ฐ€์ ธ์˜ค๊ธฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ์ง€, ๋ช‡๋ถ„์ด์ƒ(์†๋„๋ณด๋‹ค๋Š” ์—๋„ˆ์ง€ ํšจ์œจ์„ฑ ์ค‘์‹œ)
  6. DispatchQueue.global(qos: .unspecified) : legacy API

์ž‘์—…์˜ QoS๊ฐ€ queue์˜ QoS๋ณด๋‹ค ๋†’์„ ๋•Œ

→ ์ž๋™์œผ๋กœ Queue์˜ ์šฐ์„ ์ˆœ์œ„๋„ ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋”ฐ๋ผ์„œ ๋†’์•„์ง.

.background์—์„œ .utility๋กœ ๋ฐ”๋€œ

3. ํ”„๋ผ์ด๋น— ๋””์ŠคํŒจ์น˜ ํ

  • ๋””ํดํŠธ๋Š” ์ง๋ ฌ(Serial). ์›ํ•˜๋ฉด Concurrent ์„ค์ • ๊ฐ€๋Šฅ, Qos ์„ค์ •๋„ ๊ฐ€๋Šฅ\
  • QoS๋ฅผ ์„ค์ • ํ•ด์ฃผ์ง€ ์•Š์•„๋„ iOS๊ฐ€ ์•Œ์•„์„œ ์ถ”๋ก 

๋””ํดํŠธ๋Š” serial ์ด์ง€๋งŒ , ์ธ์ž๋ฅผ ๋„ฃ์–ด attributes๋ฅผ concurrent๋กœ ์„ค์ • ๊ฐ€๋Šฅ

 

Queue ๋ถ„๋ฅ˜ํ‘œ