: 프로그램을 순차적으로 실행하는 것으로 이전 프로그램이 완료될 때까지 다음 프로그램은 대기해야한다
: 프로그램을 병렬적으로 실행, 이전 프로그램이 완료되지 않아도 다음 프로그램 실행 가능
동시성 프로그래밍(concurrency)이란? 여러 개의 스레드가 번갈아가면서 실행되어 동시에 실행되는 것처럼 보이는 것.
GCD (Grand Central Dispatch) / Operation Queue / Thread 등
: 다른 스레드에서 오래걸리는 작업들이 비동기적으로 동작하도록 만들어줌
: 멀티코어와 멀티프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 만든 것이다. 프로그래머가 실행할 작업을 Dispatch Queue에 추가하면 GCD가 작업에 맞는 스레드를 자동으로 생성해서 실행하고 스레드를 제거한다.
DispatchQueue.main.async {
//statements
}
DispatchQueue.global(qos : .background).async {
//statement
}
let concurrentQueue = DispatchQueue(label:“concurrent”, qos : .background, attributes: .concurrent)
let serialQueue = DispatchQueue(label : “serial”, qos: .background)
DispatchQueue.gloabal(qos:.background).async {
//statement
DispatchQueue.main.async {
//statement
}
}
-> GCD에서는 주로 백그라운드 큐에서 메인 큐로 이동하는 작업 많이 함.
: GCD 기반으로 여러가지 기능이 추가된 대기열. Concurrent dispatch Queue 와 동일하게 동작하며 Operation Queue 클래스에 의해 구현된다.
OperationQueue.addOperation() {
//statement <- 백그라운드에서 실행됨( 이때, UI와 관련된 코드는 메인스레드에서 작동해 야하기 때문에 작성할 수 없음)
}
OperationQueue.addOperation() {
//statement
OperationQueue.main.addOperation {
// UI statement
}
}
(Kvo : 다른 객체의 프로퍼티에 변화가 있을 때 해당 객체가 직접 알림을 받을 수 있게 하는 매커니즘. 앱의 응집력(cohesiveness)에 중요하다. 예를 들어, MVC디자인 패턴에서 model의 상태를 controller와 view의 상태와 통일 시켜줄 때 사용한다.)