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
- 데이터 레이스로부터 안전한 타입
- 클래스와 동일한 레퍼런스 타입이지만 클래스와는 달리 동시 접근으로 인한 데이터 변경으로 부터 안전하다.