본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.
동기/비동기/직렬/동시성 Sync/Async/Serial/concurrent
동기/비동기 Sync/Async
동기와 비동기는 하나의 스레드 내에서 작업을 수행하는 방식의 차이를 의미한다.
일반적인 동기와 비동기에 대한 설명은 다음과 같다:
동기 Synchronous | 비동기 Asynchronous |
|
|
직렬/동시성 Serial/concurrent
직렬과 동시성은 스레드를 사용하는 방식의 차이를 의미한다.
일반적인 직렬과 동시성에 대한 설명은 다음과 같다:
직렬 Serial | 동시성 Concurrent |
|
|
조합
이 조합들에 대해서 다음과 같이 정리할 수 있다:
동기 - 직렬 Sync - Serial | 비동기 - 직렬 Async - Serial |
메인 스레드는 큐로 보낸 태스크가 완료될 때까지 기다리며 (Sync) 큐로 보내진 태스크는 순차적으로 실행되기 때문에 이전 태스크가 끝나길 기다린다 (Serial) |
메인 스레드는 큐로 보낸 태스크의 완료 여부와 상관 없이 다음 태스크를 실행하고 (Async) 큐로 보내진 태스크는 순차적으로 실행되기 때문에 이전 태스크가 끝나길 기다린다 (Serial) |
동기 - 동시성 Sync - Concurrent | 비동기 - 동시성 Async - Concurrent |
메인 스레드는 큐로 보낸 태스크가 완료될 때까지 기다리며 (Sync) 큐로 보내진 태스크는 이전 태스크와 상관 없이 다른 스레드에 보내지며 동시에 실행된다 (Concurrent) |
메인 스레드는 큐로 보낸 태스크의 완료 여부와 상관 없이 다음 태스크를 실행하고 (Async) 큐로 보내진 태스크는 이전 태스크와 상관 없이 다른 스레드에 보내지며 동시에 실행된다 (Concurrent) |
은행 창구 매니저
은행 창구 매니저에서는 어떤 전략을 선택해야할까?
동기 - 동시 전략이 가장 적절하다고 생각한다.
메인 스레드인 은행에서는 큐로 보낸 태스크가 완료될 때까지 기다려야한다.
고객 응대가 끝나기 전에 다른 고객을 응대할 수는 없기 때문이다.
그리고 여러명의 은행원, 즉 각각의 스레드는 동시에 고객을 응대할 수 있기 때문이다.
DispatchQueue
GCD를 사용하기 위한 대기열
대기열들에 작업을 추가해주기만하면 알아서 스레드를 관리하여 작업을 처리하도록 도와줌
FIFO(First In, First Out)로 작업을 처리
main/global
DispatchQueue.main과 DispatchQueue.global()은 이미 만들어져있는 큐로 각각 Serial, Concurrent 큐에 해당
main은 일반적인 Serial큐와는 달리 앱이 실행되는 동안 늘 메모리에 올라와 있음
main에 작업을 추가하면 Serial 큐인 main 스레드에서 작업을 처리 -> main 스레드에만 작업을 쌓을 경우 동시에 여러 작업 처리 불가
global에 작업을 추가하면 Concurrent Queue이기 때문에 새로운 스레드를 만들어 그 위에서 작업을 처리
global 스레드는 main 스레드가 아닌, 작업을 처리하기 위해 발생한 스레드들을 의미
main 스레드와 달리 global 스레드는 global()이 호출되면 작업을 처리하기 위해 메모리에 올라왔다가, 작업이 끝나고 나면 메모리에서 제거
참조
https://trumanfromkorea.tistory.com/52
https://80000coding.oopy.io/4690385f-97d9-4add-9e94-004c47c82820
'YAGOM CAREER STARTER' 카테고리의 다른 글
[토요스터디A반] 20230311: Protocol Oriented Programming (0) | 2023.03.13 |
---|---|
[TIL] 20230309: Sync/Async/Blocking/Non-Blocking (0) | 2023.03.09 |
[TIL] 20230303: 프로토콜로 id 지정하기 (0) | 2023.03.04 |
[TIL] 20230302: 함수배치순서, format specifier (0) | 2023.03.03 |
[TIL] 20230228: Convention, weak-strong (0) | 2023.03.01 |