본문 바로가기
개발 이야기/IOS 개발

IOS의 비동기 처리, 개념

by 정선한 2023. 8. 17.
728x90
반응형

IOS GCD(Grand Central Dispatch)
 : 멀티 코어 프로세서에 코드를 동시에 실행시킬 있도록 하는 프레임워크

GCD작업단위 : Task
Task Dispatch Queue 전달하면 시스템은 해당 동시 코드를 처리함. Task의 단위는 {} 블록, DispatchWorkItem 인스턴스가 된다.

Dispatch Queue Main Thread, Background Thread에서 Task들을 Serially or Concurrently 하도록 실행시키는 Dispatch Object의 클래스임.

비동기 : DispatchQueue.main.async { code }
동기 : DispatchQueue.main.sync { code }

Main Queue 전달된 Task는 항상 Main Thread에 의해 수행된다.
Global Queue에 전달된 Task또한 Main Thread에 수행될 있음 > sync 메서드 성능 최적화로 인해 벌어지는 상황이며, 해당 판단은 GCD에서 실행함.

Issue
Main Queue sync Task를 전달한 경우, Dedlock을 통한 강제종료 이슈 발생.
Conclusions
반환되지 않은 Task 존재하는 SerialQueue에 동기적으로 Task 전달함. 관련 현상 발생 , DeadLock 걸리면서 앱이 종료되는 이슈가 발생.

Async를 통해 비동기 적으로 Task 전달하는 경우, Task를 타겟 Queue에 추가만 하고 해당 코드 블록은 Return된다. 이후 추가된 Task GCD 판단에 따라 해당 시점에 실행된다. 따라서 개발자는 정확한 실행 시점을 수가 없다.

Sync를 통해 동기적으로 Task를 전달하는 경우, 해당 Queue에 추가된 즉시 GCD Task를 Thread 배정하고 해당 Task를 완료하기 전까지 Queue 남은 Task Lock을 걸고 해당 코드 블록으로 Return 하지 않는다.

Lock이 걸리면 Queue에 남아있는 Task들 Thread 배정 받을 없다.

See Also

 

728x90
반응형