iOS/강의, 고찰

[iOS, Swift] 동시성 프로그래밍 작성 시 생길 수 있는 문제

검은참깨두유vm 2022. 11. 1. 20:46
반응형

동시성 프로그래밍을 작성할 때에 3가지 문제가 생길 수 있다.

 

먼저 경쟁 상황으로 2개 이상의 쓰레드를 사용하여 동일한 메모리에 접근할 때,

동시에 같은 메모리에 접근하다보니 값을 변경하게 되면 여러 쓰레드에서 경쟁하여

원하지 않는 값이 나올 수 있다. 

해결방법으로는 Thread-Safe한 코드를 만들어 해결할 수 있다.

 

두번째로는 교착상황으로 한정된 자원을 여러 쓰레드에서 사용하려할 때,

자원을 얻지 못해 다음 처리를 못하는 상태를 교착상황이라 한다.

이 때 시리얼 큐를 만들거나 설계를 변경하여 수정할 수 있다.

 

세번째로는 우선순위 뒤바뀜 현상이다.

작업의 서비스 품질(QoS)가 다른 상태에서 높은 서비스 품질을 가지고 있는 쓰레드가

낮은 서비스 품질의 쓰레드의 진행이 끝나고 완료되려할 때에 우선순위 뒤바뀜 현상이 있다.

Priority Inversion이라고 불리는 현상이 최근 작업을 할 때에 많이 발생하여 힘들다.

iOS15, Xcode13에서 iOS16, Xcode14로 업데이트를 했더니,

위와 같이 현상이 자주 발생한다.

이것의 해결방법으로는 1차적으로는 GCD가 낮은 우선순위의 작업을 우선순위를 높여 처리하는 방법이 있고,

프로그래밍을 할 때에 공유된 자원에 대한 접근 시 동일한 QoS를 사용하여 해결해야한다.

 

 

최근에 Priority Inversion 오류가 발생하여 소스를 뜯어고치고 있는데,

아래의 iOS Concurrency에 대한 강의에서 도움을 받고 있다.

https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard

 

iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션

동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다., - 강의 소개 | 인프런...

www.inflearn.com

 

반응형