TIL(Today I Learned)

12월 27일(화)

공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.

Concurrency Programming

  • 동시적으로 여러 연산을 시행하도록 프로그래밍 하는것
  • 병렬 컴퓨팅과 다른 개념이다. 병렬 컴퓨팅은 물리적으로 다른 프로세서에서 동시에 여러 연산을 실행시키는 것
  • 동시성 프로그래밍은 여러 연산이 동시’적’으로 실행되는 것(한개의 프로세서에서 여러 연산을 번갈아가면서 실행시킴으로써 동시에 실행되는 것처럼 보이게 하는 것도 동시성 프로그래밍)
  • 또한 병렬 컴퓨팅도 동시성 프로그래밍이다.

Swift Concurrency(async/await)

  • GCD 또는 async/await을 이용하여 동시성 프로그래밍이 가능
  • GCD를 이용하여 동시성 프로그래밍을 하면 콜백 지옥(nested closure)과 데이터 레이스(동기화 문제)가 발생한다는 문제가 있음
  • async/await을 이용하면 비동기 코드를 동기 코드처럼 작성할 수 있고, 컴파일 타임에 데이터 동기화 문제를 잡을 수 있음
  • 비동기 함수를 정의할 때 또는 비동기 함수를 병렬적으로 실행할 때 async 키워드를 사용
  • 비동기 함수를 호출하고 이를 비동기 함수가 끝날때 까지 대기할 때 await 키워드를 사용
      listPhotos(inGallery: "Summer Vacation") { photoNames in
          let sortedNames = photoNames.sorted()
          let name = sortedNames[0]
          downloadPhoto(named: name) { photo in
              show(photo)
          }
      }
    
      let photoNames = await listPhotos(inGallery: "Summer Vacation")
      let sortedNames = photoNames.sorted()
      let name = sortedNames[0]
      let photo = await downloadPhoto(named: name)
      show(photo)
    

Actor

  • 데이터 레이스로부터 안전한 타입
  • 클래스와 동일한 레퍼런스 타입이지만 클래스와는 달리 동시 접근으로 인한 데이터 변경으로 부터 안전하다.

참고