TIL57 ✨

YaR Lab·2023년 7월 11일
0

TIL✨

목록 보기
45/135
post-thumbnail

🗓️23.07.11

오밋처리시

discardableresult 분리

defer

test target

https://developer.apple.com/forums/thread/52211

https://morgan-kang.notion.site/230529-TIL-Code-Coverage-Option-Setting-51a160739c9a475d91dbef71d747d56a

xcode 캐쉬 삭제

커멘드+쉬프트+k

CLI에서 단위테스트 하기

https://dev.to/sokol8/how-to-unit-test-cli-application-in-swift-5f5o

✅ Concurrency Programming

📌 동시성 프로그래밍 vs 병렬 프로그래밍

1️⃣ 병렬 프로그래밍

  • 실제로 여러 작업을 동시에 실행하여 처리 속도를 높임
  • 여러 개의 CPU(코어)가 하나의 작업(Task)을 분담 하는 것
  • 앞의 내용이 모여서 여러 개의 작업을 여러 개의 코어가 분담할 수도 있음의 개념이 될 수도 있음
  • 따라서 여러 가지 일을 여러 개의 코어에서 담당하는 것이 병렬 프로그래밍일 수도 있고, 아닐 수도 있음

2️⃣ 동시성 프로그래밍
Context Switching을 통해 여러 작업을 번갈아 가면서 동시에 처리하는 것처럼 실행하는 것처럼 보이게 함

📌 동기(Synchronous) vs 비동기(Asynchronous)

1️⃣ 동기

  • 작업이 끝나기를 기다리는 것
  • 실행종료 시점을 알 수 있음

2️⃣ 비동기

  • 작업이 끝나기를 기다리지 않고, 다음 코드 블록을 바로 실행시키는 코드
  • 실행종료 시점을 알 수 없음

✅ GCD 기본

📌 Serial/Concurrent

1️⃣ Serial

  • 단일 스레드 환경
  • .main

2️⃣ Concurrent

  • 다중 스레드 환경
  • global()

📌 sync/async

1️⃣ main.async

  • 메인스레드 비동기
    2️⃣ global().async
  • 글로벌스레드 비동기
    3️⃣ global().sync
  • 글로벌스레드 동기
    4️⃣ main.sync
    deadlock(교착상태)에 빠지게 되는 이유?
  • sync는 main스레드의 Block-wait이 끝나기를 기다리는 상태인데, main스레드에는 수행되어야할 코드블록이 있기 때문에 실행하지 못함
  • main스레드는 sync의 코드블록이 수행되기를 기다려야하는데 여기서 sync의 코드블록은 main 코드블록이기 때문에 교착상태에 빠짐
DispatchQueue.main.sync { /* error: error: Execution was interrupted, reason: EXC_BREAKPOINT (code=1, subcode=0x18011922c).
    The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation. */
    for _ in 1...5 {
        print("😀😀😀😀😀")
        sleep(1)
    }
}

0개의 댓글