본문 바로가기
공부/computer science

비동기 프로그래밍 방식에 대해 알아보자

by 마자용 2022. 2. 1.
링크를 참고하며 정리했습니다

 


비동기 프로그래밍 (Asynchronous Programming)

  • 코드의 실행 결과에 대한 처리를 별도의 공간에 맡겨둔 뒤, 바로 다음 코드를 실행 시킨다.
  • 프로그램의 실행 흐름을 멈추어서, 기다림 없이 바로 다음 작업을 실행할 수 있게 하는 방식이다.
  • 한마디로 코드를 병렬 처리하는 것 ...!

 

1. 동시성 프로그래밍 (Concurrency Programming)

 - 멀티 태스킹을 위해 여러 개의 스레드를 번갈아가며 실행한다.

 - (주로) 싱글 코어에서 멀티 스레드를 동작 시킬 때 이용하는 방식이다.

2. 병렬성 프로그래밍 (Parallelism Programming)

 - 물리적으로 정확히 동시에 실행한다.

 - 멀티 코어에서 멀티 스레드를 동작 시킬 때 이용하는 방식이다.

 


동시성과 병렬성 프로그래밍 방식 모두 비동기 동작을 구현할 수 있지만, 그 원리가 다르다.

 

정리하자면 이렇다.

 


+) iOS 환경에서 지원하는 동시성 프로그래밍

 1️⃣ GCD (Grand Central Dispatch)

  • 멀티 코어, 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있게 해줌.

 2️⃣ 연산 대기열 (Operation Queue)

  • 비동기적으로 실행 되어야 하는 작업을 객체 지향적인 방법으로 사용함.
  • 코드 예시
switch photoAutorizationStatus {
        case .authorized:
            print("접근 허가")
            self.requestCollection()    // 컬렉션 불러옴
            self.photoListTableView.reloadData()
        case .denied:
            print("접근 불허")
        case .limited, .restricted:
            print("접근 제한")
        case .notDetermined:
            print("아직 응답 안함")
            PHPhotoLibrary.requestAuthorization({ status in // 다시 허가 요청
                switch status {
                case .authorized:
                    print("사용자가 허용함")
                    OperationQueue.main.addOperation {
                        // reload 된 데이터가 메인 스레드에서만 동작할 수 있도록 함
                        self.photoListTableView.reloadData()
                    }
                case .denied:
                    print("사용자가 불허함")
                case .limited, .restricted:
                    print("접근 제한")
                default:
                    break
                }
            })
        @unknown default:
            break
        }

 

3️⃣ 스레드 (Thread)

  • 멀티 스레드 프로그래밍을 위한 클래스

 

- 이어서 보면 좋은 게시글: 개발자 문서 읽기 - Operation Queue (조만간... 작성 예정)

- 이어서 보면 좋은 게시글: GCD에 대해 알아보자

'공부 > computer science' 카테고리의 다른 글

JPEG vs PNG  (0) 2022.03.17
Encoding  (0) 2022.03.14
프로그래밍 디자인 패턴에 대해 알아보자  (0) 2022.01.28
difference of OOP and Functional Programming  (0) 2021.08.27
Pure ALOHA  (1) 2021.02.14

댓글