CPU: Central Processing Unit
싱글코어
한명이 그림판 -> 유튜브 -> 인터넷 순서대로 일을 함!
듀얼코어
두명이 그림판, 유튜브, 인터넷을 분업해서 함
한개의 코어가 n개인 코어인 것처럼 속이는 것
복사기가 8대나 있는데 왜 한 대의 복사기만 사용해?
💡 다른 복사기도 사용해보자!
어떻게 작업을 다른 쓰레드에서 동시에 일을 처리할 수 있을까? 💡 1번 쓰레드에 있던 작업을 대기행렬/큐에 넣어주자!
// 글로벌 큐에 비동기적으로 보낼 거다.
DispatchQueue.global().async{
// 작업들을
}
or
let queue = DispatchQueue.global()
queue.async {
}
하나의 클로저에 들어간 작업은 동기적으로 동작한다.
비동기함수 | GCD | Operation | |
---|---|---|---|
작업의 크기 | 간단한 일 | 복잡한 일 | |
작업의 종류 | 함수를 사용하는 작업(메서드 위주) | + 여러가지 기능 -> | 데이터와 기능을 캡슐화한 객체 |
취소 / 순서지정 / 일시중지 (상태추적) | |||
재사용 용이성 | |||
프로젝트 효율성이나 사례 적합성을 따져 적절히 사용 |
Synchronous vs Asynchronous
다른 쓰레드에게 일을 시키고 작업이 끝날 때까지 보고있는다.(기다린다.) (실질적으로는 메인쓰레드에서 일한다.)
DispatchQueue.global().sync {
}
다른 쓰레드에게 일을 시키고 작업이 끝날 때까지 내 할 일 한다.(기다리지 않는다.) -> 메인쓰레드가 다른 일 처리를 시작할 수 있다.
DispatchQueue.global().async {
}
대부분은 서버와의 통신 때문(네트워크와 관련된 작업들은 내부적으로 비동기적으로 구현)
Serial vs Concurrency
- Serial queue 다른 한 개의 쓰레드에서 분산 처리
-> 순서가 중요한 작업을 처리할 때 사용 - Concurrency queue > 다른 여러 개의 쓰레드에서 분산 처리
-> 각자 독립적이지만, 유사한 여러개의 작업을 처리할 때 사용
작업을 보내는 시작 점에서 기다릴지 말지
대기열로 보내진 작업이 한 개의 쓰레드로 처리할 것 인지 여러 개의 쓰레드로 처리할 것 인지
비동기적으로 사용할 때 같은 큐를 반복하여 사용하면 동기적으로 동작하게 됨. ```
엘런님의 인프런 강의 를 보고 정리한 내용입니다.