Swift Concurrency (즉, 동시성 프로그래밍)은 비동기 프로그래밍을 위한 기능으로, 멀티스레딩과 비동기 작업을 더 안전하고 효율적으로 처리할 수 있게 도와준다.
멀티스레딩은 '프로그램 내에서 여러 작업을 동시에 실행하는 기술' 이다.
하나의 프로세스 내에서 여러 개의 스레드가 병렬로 실행되며, 각 스레드는 독립적으로 작업을 처리할 수 있다. 이 방식은 CPU를 최대한 활용하여 프로그램의 성능을 높이고, 특히 시간이 오래 걸리는 작업들을 병렬로 처리하여 사용자 경험을 향상시킬 수 있다.
Swift는 DispatchQueue
, OperationQueue
, Thread
와 같은 여러 방법을 통해 멀티스레딩을 구현할 수 있으며, 그 중 가장 널리 사용되는 방법은 Grand Centeral Dispatch (GCD) 이다.
GCD를 사용하면 여러 작업을 비동기적으로 실행할 수 있고, 그 작업들이 병렬로 실행된다. Swift Concurrency는 GCD를 기반으로 작업을 처리하며, 멀티스레딩 환경에서 더 안전하고 효율적으로 동시성을 관리할 수 있게 해준다.
DispatchQueue 사용한 멀티스레딩 예시
func firstTask() -> Void {
print("첫번째 작업 시작 스레드: \(Thread.current)")
sleep(2)
print("첫번째 작업 끝 스레드: \(Thread.current)")
}
func secondTask() -> Void {
print("두번째 작업 시작 스레드: \(Thread.current)")
sleep(2)
print("두번째 작업 끝 스레드: \(Thread.current)")
}
// GCD를 사용하여 두 작업을 병렬로 실행
DispatchQueue.global(qos: .background).async {
firstTask()
}
DispatchQueue.global(qos: .background).async {
secondTask()
}
// 메인 스레드가 종료되지 않도록 잠시 대기
sleep(3)
스레드 번호가 다르다는 점에서, 두 작업은 병렬로 실행됨.
동시성은 여러 작업을 겹쳐서 처리하는 개념으로, 여러 작업이 동시 실행되는 것처럼 보이지만, 실제로는 하나의 CPU나 프로세서에서 번갈아 가면 실행된다.
즉, 여러 작업을 실행하는 순서가 겹치게 되어, 사용자는 작업들이 동시에 실행되는 것처럼 보이지만 실제로는 시간을 나누어 처리하는 방식.
동시성은 작업의 병렬 실행을 다루는 방법이지, 실제로 여러 작업이 동시에 실해되는 것을 보장하지 않는다. CPU가 여러 작업을 빠르게 전환하며 처리하는 방식이기 때문에, 한 번에 하나의 작업만 실제로 처리된다.
시분할 (Time-sharing)과 컨텍스트 스위칭이 적용되어 작동함!
병렬성은 여러 작업을 실제로 동시에 실행하는 개념으로, 여러 작업을 여러 CPU 또는 프로세서 코어에서 동시에 실행할 수 있는 환경을 말한다.
즉, 하드웨어 차원에서 여러 작업이 동시에 처리되는 것을 의미한다. 이를 위해 멀티코어 CPU나 여러 CPU가 필요하며, 각 작업은 별도의 프로세서에서 동시에 실행된다.
병렬성은 작업이 실제로 동시에 실행되므로 실제 시간 단축을 제공한다. 여러 작업이 실제로 병렬로 실행되기 때문에 작업의 완료 시간은 각 작업의 실행 시간이 병렬로 이루어지는만큼 빨라진다.
![]() | ![]() |
---|
ref.