일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- core data
- IOS
- 비동기
- @state
- 앨런
- 프로세스 스케줄링
- 오브젝트
- struct
- Swift
- 데드락
- scrollview
- forEach
- 운영체제
- deadlock
- COLOR
- 가상 메모리
- 100 days of SwiftUI
- UserDefaults
- 동시성
- decode
- Linked List
- Apple Developer Academy
- Codable
- 상호배제
- 동기화
- 인프런
- Algorithm
- SwiftUI
- 알고리즘
- async
Archives
- Today
- Total
기어가더라도 제대로
2. 동기(Synchronous) VS Asynchronous(비동기) 본문
비동기
- 작업을 다른 스레드로 보내서 처리를 하는데, 보내는 즉시 원래 스레드로 리턴한다.
- 1번 작업이 오래걸리더라도, 그 일이 끝나던지 말던지 2번 작업으로 갈 수 있다.
DispatchQueue.global().async {
}
- 원래 작업이 진행되고 있던 곳(메인스레드)에서
- 디스패치 글로벌 큐로 보낸 작업을
- 안기다린다.
동기
- 1번 작업이 끝날 때까지 메인 스레드를 막고 기다린다.
- 다른 큐에 보내는 것 같지만 실질적으로 처리는 메인 스레드에서 진행한다.
DispatchQueue.global().sync {
}
- 원래 작업이 진행되고 있던 곳(메인스레드)에서
- 디스패치 글로벌 큐로 보낸 작업을
- 동기적으로 기다린다.
위에 task1,2,3() 메서드들은 시작 - 완료 사이에 `sleep(1,2,3)` 이 있는데,
동기 작업이라면 그 시간을 기다렸을 텐데, 비동기 작업이여서
오른쪽 위에 0.0002 초만에 작업이 끝난 모습이다.
(물론 완료 프린트 문은 수 초가 지난 다음에 찍힌다.)
동기적으로 처리한 경우엔, 8.002초가 걸린다.
결론
- 비동기는 작업을 다른 스레드로 보내고 즉시 리턴
- 동기는 작업을 다른 스레드로 보내고 완료될 때 까지 기다린다.
- 비동기는 서버와의 통신(네트워크 작업) 때문에 필요하다.
- 예) URLSession
- 일을 시키고 끝날 때까지 기다리느냐 안 기다리느냐가 포인트
'CS > 동시성' 카테고리의 다른 글
5. GCD 사용시 주의해야할 사항 (0) | 2022.09.26 |
---|---|
4. 디스패치 큐의 종류 (0) | 2022.09.26 |
3. 직렬과 동시 (0) | 2022.08.31 |
1. GCD 와 Operation (0) | 2022.08.31 |
0. 동시성 프로그래밍의 필요성 (0) | 2022.08.31 |
Comments