일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자스민
- javascript
- 이종호
- 스벨트
- 개발자
- 호키스
- TDD
- queue
- data structure
- 계명대 이종호
- HTML
- 리액트 예제
- 스위프트
- 계명대
- 자바스크립트 자료구조
- 자료구조
- jest
- hokeys
- IOS
- 자바스크립트
- 개발
- hokidoki
- Svelte
- 힛잇
- Hitit
- react
- SWIFT
- 리액트
- 호키도키
- 비동기
- Today
- Total
Dog foot print
[IOS] Serial & Concurrent Queue 본문
비동기와 동시의 차이
학생들과 이야기 해보면 비동기
와 동시
의 의미를 헷갈리는 경우가 종종 존재한다. Serial 과 Concurrent를 설명하기 전에 집고 넘어가도록 하자.
비동기는 말그대로 어떤 작업을 기다리지 않는다라는 의미이며, 동시라는 의미는 같은 시간에 어떤 작업이 말 그래도 동시에 일어 날 수 있는 것을 의미한다.
Serial Queue
SerialQueue는 순서가 중요한 작업들을 처리할 때 사용 되는 큐이다. 아래의 코드를 보도록 하자.
let queue = DispatchQueue(label : "serial")
queue.async{
sleep(3);
print("1")
}
queue.async{
sleep(2);
print("2")
}
queue.async{
sleep(1);
print("3")
}
//결과 1 2 3
큐에 비동기적으로 코드를 보냈음에도 불구하고 코드가 순차적으로 진행된다. 이를 그림으로 보면 다음과 같다.
작업이 큐에 전달되어 작업 1이 쓰레드2에게 전달되었다. 그러나 이 큐는 다른 쓰레드에 일을 전달하기는 하나, 전달한 작업이 종료되기 까지 큐에서 다음 작업을 다른 쓰레드로 전달 하지 않는다.
SerialQueue 정리 : 이 큐를 통해 다른 쓰레드에게 작업을 전달한 경우 해당 작업이 종료될 때까지 큐에서 작업을 보내지 않는다.
.
Concurrent Queue
Concurrent Queue는 동시에 처리하는 작업을 처리할 때 사용 되는 작업이다.
아래의 코드를 보도록 하자.
let queue = DispatchQueue(label : "serial", attributes : .concurrent)
queue.async{
sleep(3);
print("1")
}
queue.async{
sleep(2);
print("2")
}
queue.async{
sleep(1);
print("3")
}
//결과 3, 2, 1
위의 코드와 다르게 queue의 attribute에 concurrent 를 할당했다. 그리고 결과는 빨리 출력되는 순서인 3, 2, 1 이 출력되었다.
이해를 돕기 위해 그림으로 보도록 하자.
serialQueue와 다르게 Queue가 전달한 작업을 더 이상 기다리지 않고 Queue에 쌓인대로 바로 바로 다른 쓰레드에게 작업을 할당한다. 그렇기 때문에 작업이 빨리 종료되는 순으로 출력이 이루어지게 되는 것이다.
정리
Serial Queue : 다른 쓰레드로 보낸 작업이 종료되기 기다렸다가 이후 다음 작업을 다른 쓰레드에게 전달한다.
ConCurrent Queue : 다른 쓰레드로 보낸 작업이 종료되기를 기다리지 않고 다음 작업을 다른 쓰레드에게 전달한다.
'IOS > Swift' 카테고리의 다른 글
[SWIFT] Dispatch Queue의 종류 (0) | 2021.09.26 |
---|---|
[IOS] Async & Sync (0) | 2021.09.23 |
[IOS] 쓰레드와 동시작업 (0) | 2021.09.22 |
[Swift] 동기적 작업과 비동기적 작업 (0) | 2021.09.20 |
[SWIFT] protocol (0) | 2021.07.21 |