링크를 참고하며 정리했습니다
비동기 프로그래밍 (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 |
댓글