ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] λ™μ‹œμ„± ν”„λ‘œκ·Έλž˜λ° 방법(+동기/비동기에 λŒ€ν•œ 이해)
    iOS 2023. 5. 26. 17:58

     

     

     

     

    πŸ’‘ μŠ€λ ˆλ“œ(Thread)에 λŒ€ν•΄ λ¨Όμ € 짚고 λ„˜μ–΄κ°€μž!

     

    μ»΄ν“¨ν„°μ—μ„œ μ²˜λ¦¬ν•˜λŠ” 일의 λ‹¨μœ„λ₯Ό νƒœμŠ€ν¬λΌκ³  λΆ€λ₯΄κ³ , 이 νƒœμŠ€ν¬λŠ” ν”„λ‘œμ„ΈμŠ€λ‘œ λ§Œλ“€μ–΄μ™”λ‹€.

    μ΄ˆλ°˜μ—λŠ” ν”„λ‘œμ„ΈμŠ€ λ‹¨μœ„λ‘œ μŠ€μΌ€μ€„λ§ν•˜κ³  μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ™μ‹œμ— μ‹€ν–‰μ‹œν‚€λŠ” λ‹€μ€‘ν”„λ‘œμ„ΈμŠ€ λ°©μ‹μœΌλ‘œ λ©€ν‹°νƒœμŠ€ν‚Ήμ„ μ‹€ν˜„ν–ˆλ‹€.

     

    ν•˜μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€ 생성/μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ˜ 큰 μ˜€λ²„ν—€λ“œ, ν”„λ‘œμ„ΈμŠ€ 사이 ν†΅μ‹ μ˜ 어렀움 λ“±μ˜ 문제점이 λ°œμƒν–ˆκ³ ,

    κ·Έ λŒ€μ•ˆμœΌλ‘œ λ‚˜μ˜¨ 것이 λ°”λ‘œ μŠ€λ ˆλ“œμ΄λ‹€! μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ μž‘μ€ 크기의 μ‹€ν–‰ λ‹¨μœ„λΌκ³  ν•  수 μžˆλ‹€.

    μŠ€λ ˆλ“œμ˜ λ“±μž₯으둜 ν”„λ‘œμ„ΈμŠ€ λŒ€μ‹  μŠ€λ ˆλ“œκ°€ μ‹€ν–‰ λ‹¨μœ„κ°€ λ˜μ—ˆκ³ , μŠ€λ ˆλ“œλ₯Ό 가지지 μ•ŠλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 더이상 μ‘΄μž¬ν•˜μ§€ μ•Šκ²Œ λ˜μ—ˆλ‹€.

     

     

    [νŠΉμ§•]

    μŠ€λ ˆλ“œλŠ” κ°œλ°œμžμ—κ²Œ νƒœμŠ€ν¬λ₯Ό λ§Œλ“œλŠ” λ‹¨μœ„μ΄μž, μš΄μ˜μ²΄μ œμ—λŠ” μ‹€ν–‰ λ‹¨μœ„κ°€ λœλ‹€.

    μŠ€λ ˆλ“œλŠ” μ½”λ“œ, 데이터, νž™, μŠ€νƒμ΄ μžˆλŠ” 싀체이닀.

    ν”„λ‘œμ„ΈμŠ€λ₯Ό 생성할 λ•Œ 컀널은 μžλ™μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€ 내에 1개의 μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜κ³ , 이 것을 메인 μŠ€λ ˆλ“œλΌκ³  λΆ€λ₯Έλ‹€.

     

     


     

    처음 λ¬΄μž‘μ • μ–΄ν”Œμ„ λ§Œλ“€κΈ° μ‹œμž‘ν–ˆμ„ λ•Œ, μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό 뢈러였면 렉이 λ„ˆλ¬΄ 많이 κ±Έλ Έλ‹€!

    κ·Έλž˜μ„œ λ‹¨μˆœνžˆ λ§₯뢁 μ„±λŠ₯의 λ¬Έμ œμΈκ°€?(κ³ κΈ‰ν˜•μΈλ°...) μ‹Άμ—ˆμ§€λ§Œ 사싀은 비동기 처리λ₯Ό ν•˜μ§€ μ•Šμ•„μ„œ λ°œμƒν•œ μΌμ΄μ—ˆλ‹€.

    데이터 λΆˆλŸ¬μ˜€λŠ” 일을 λ‹€λ₯Έ ν•  일도 산더미인 메인 μŠ€λ ˆλ“œμ—λ§Œ μ‹œν‚€λ‹ˆκΉŒ λΆˆλŸ¬μ˜€λŠ”λ° 였래 κ±Έλ¦¬λŠ” 일을 μ‹œμΌœμ„œ 렉이 걸리게 된 것이닀.

     

    κ·Έλž˜μ„œ 비동기 처리λ₯Ό 톡해 메인 μŠ€λ ˆλ“œμ—λ§Œ 맑겼던 일을 λ‹€λ₯Έ μŠ€λ ˆλ“œμ—λ„ λ‚˜λˆ μ£Όμ–΄ λΆ„μ‚° 처리λ₯Ό ν•΄μ£Όλ©΄ 일을 λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

     

     

     

    How to?

    Q. Aμž‘μ—…μ€ Thread 1λ²ˆμ—μ„œ μ‹œν‚€κ³ , Bμž‘μ—…μ€ Thread 2λ²ˆμ—μ„œ μ‹œμΌœμ•Όκ² λ‹€! ⭕️  ❌

     

    κ°œλ°œμžκ°€ μŠ€λ ˆλ“œμ—κ²Œ 직접 λͺ…λ Ήν•  수 μ—†λ‹€! κ°€ 정닡이닀.

    일단 μž‘μ—…μ„ 큐(λŒ€κΈ°μ—΄)에 보내면 운영체제(iOS)κ°€ μ•Œμ•„μ„œ λΆ„μ‚°μ²˜λ¦¬λ₯Ό ν•΄μ€€λ‹€.

     

     

     

    DispatchQueue

    GCD의 κ°œλ…μœΌλ‘œ, 큐의 μ’…λ₯˜, QoS μš°μ„ μˆœμœ„, sync(동기), async(비동기)λ₯Ό μ„€μ •ν•΄μ„œ 메인 μŠ€λ ˆλ“œλ‚˜ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰ν•˜λ„λ‘ μ²˜λ¦¬ν•  수 μžˆλ‹€.

     

    DispatchQueue μ‚¬μš© μ˜ˆμ‹œ

     

     

     

    동기(sync)와 비동기(async)의 κ°œλ…

    동기 비동기
    μž‘μ—…μ„ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—κ²Œ μ‹œν‚¨ λ’€, κ·Έ μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ λ‹€μŒ μž‘μ—…μ„ 진행 μž‘μ—…μ„ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—κ²Œ μ‹œν‚¨ λ’€, 기닀리지 μ•Šκ³  λ‹€μŒ μž‘μ—… 진행

     

     

    직렬(Serial)κ³Ό λ™μ‹œ(Concurrency)의 κ°œλ…

    직렬 λ™μ‹œ
    λ‹€λ₯Έ 1개의 μŠ€λ ˆλ“œμ—μ„œ μž‘μ—… 처리 λ‹€λ₯Έ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œμ—μ„œ μž‘μ—… 처리

     

     

     

Designed by Tistory.