동시성
-
- 특정 프로세스의 실행 시간이 다른 프로세스의 흐름과 겹치는 상황에서 동시에 실행한다고 말한다.
- 동시에 실행하거나 동시에 실행하는 것처럼 보이게 하는 것을 동시성이라고 한다.
- 싱글코어에서는 2개의 작업을 동시에 실행하는 것 처럼 보이기 위해 context switch가 일어난다.
- context switch
- 프로세스나 스레드의 상태를 저장하여 나중에 복원하고 실행을 재개한 다음 이전에 저장된 다른 상태를 복원하는 프로세스이다.
프로세스 (process)
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
- 프로세스는 하드 디스크에 설치 되어 있는 프로그램을 메모리 상에 실행중인 작업입니다.
- 운영체제에서 여러개의 프로세스를 동시에 실행하는 것을 멀티태스킹이라고 한다.
- 어떤 작업을 하나이상의 프로세스에서 병렬로 처리하는 것을 멀티 프로세싱이라고 합니다.
Queue
- iOS의 동시성 프로그래밍은 Queue에 넣기만 하면 OS가 알아서 쓰레드를 찾아서 쓰레드 관리(분산처리)한다.
- 선입 선출(FIFO)로 동작한다.
- Queue로 Task들을 보내는 방법
GCD(Grand Central Dispatch)
- DispatchQueue 사용
- Low level API로 스레드 풀을 관리하며 dispatch queue에 있는 작업들을 사용 가능한 스레드에 스케줄링
- 개발자는 스레드 관리에 신경쓰지 않아도 되며 Task들을 dispatch queue에 넣어주면 됨.
//큐로 보낼거야 | 큐의 종류|비동기적으로
DispatchQueue.global().async {
//다른 쓰레드로 보낼 작업을 배치
//이 클로저 하나가 작업의 뭉탱이
}
Operation
- Operation Queue 사용
- GCD를 기반으로 생성됨
- Operation : GCD + 여러가지 기능(작업 취소, 순서지정, 의존성 등)
- 복잡한 일
- 재사용성 : 데이터와 기능을 캡슐화한 객체
- 작업 단위 혹은 작업을 래핑하고 나중에 실행할 수 있으며 해당 작업 단위를 여러번 제출 가능
Synchronous(동기)
- 첫번째 작업 시작 후 작업이 끝나는 것을 기다린 후 다음 작업을 처리한다.
- 즉, 작업이 끝나기 전까지 메인쓰레드가 다른 작업을 수행하지 못한다.
- 동기적으로 보내는 코드를 짜더라도 실직적으로 메인쓰레드에서 순차적으로 처리됨(동기 코드와 동일하게 작업)
DispatchQueue.main.sync {
//Main 큐에서 동기 방식으로 실행할 코드
//많이 사용 안한다.
// 처리시간을 줄이기 위하여 비동기를 사용(Queue를 통해 쓰레드 분산)하는 거라 동기는 거의 사용 안함
}
Asynchronous(비동기)
- 첫번째 작업 시작 후 작업이 끝나는 것을 기다리지 않고 바로 다음 작업을 처리하는 것
- 메인 쓰레드가 다른 일 처리를 시작할 수 있다.
- 여러가지 작업을 동시에 처리 가능
- 비동기 개념이 필요한 이유는 대부분의 서버와의 통신(네트워크 작업) 때문
- 네트워크와 관련된 작업들은 내부적으로 비동기적으로 구현되어 있음
DispatchQueue.main.async {
//Main 큐에서 비동기방식으로 실행할 코드
//즉, 실행하고 기다리지 않는 코드
}
Main Queue - Serial(직렬) 큐
- Queue에서 받은 테스크들을 단 하나의 다른 쓰레드로 보내는 큐
- 한 번에 하나의 테스크를 실행하여 순차적으로 실행
- 순서가 중요한 작업을 처리할 때 사용
- 순서가 중요한 작업을 처리할 때 사용
- Main Thread에서 사용되는 Queue(Main Queue)
Global Queue - Concurrency(동시) 큐
- Queue에서 받은 테스크 들을 여러개의 다른 쓰레드로 보내는 큐
- 많은 작업을 동시에 진행
- 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용
- 몇개의 쓰레드로 분산할지는 시스템이 알아서 결정, 다만 여러개의 쓰레드로 분산 처리
출처
https://lxxyeon.tistory.com/159
[iOS] Concurrency(동시성) 프로그래밍(1) - Concurrency(동시성) 프로그래밍이란?
iOS에서 Concurrency(동시성) 프로그래밍에 대해 알아보자. Concurrency(동시성) 프로그래밍이란 ? GCD/Operation? DispatchQueue 의 종류 Synchronous(동기) VS Asynchronous(비동기) Serial(직렬) VS Concurrency(동시) 🔥 Concur
lxxyeon.tistory.com
'ios' 카테고리의 다른 글
7. iOS UIApplication 공부하기 (0) | 2023.11.21 |
---|---|
6. ios videoLab에 대한 문서 공부 (0) | 2023.11.14 |
4. iOS13 AppDelegate, SceneDelegate의 역할 (0) | 2023.09.14 |
3. WKWebView 공식문서 공부 2편 (0) | 2023.09.12 |
2. WKWebView 공식문서 공부 1편 (0) | 2023.09.08 |