용어 설명
1. 포그라운드 상태 / 백그라운드 상태 (iOS)
1-1. 포그라운드 (Foreground)
- 사용자 인터페이스와의 상호작용: 사용자가 앱(서비스)의 화면을 보고 있는 상태
- 알림: 사용자에게 서비스가 실행 중임을 알리기 위해 알림을 필수적으로 표시해야 합니다.
- 자원 우선순위: 시스템에서 높은 우선순위를 부여받아 메모리 정리 과정에서 마지막으로 종료되는 경향이 있습니다.
1-2. 백그라운드 (Background)
- 사용자 인터페이스와의 상호작용 부재: 사용자가 홈화면 or 다른 서비스를 보고 있는 경우, 사용자에게 보이지 않는 상태
- 자원 관리: 백그라운드 서비스는 시스템 자원이 제한적일 때 제한되거나 종료될 수 있다. 이는 배터리 수명을 보존하고 시스템 성능을 유지하기 위함입니다.
- 실행 제한: iOS와 같은 시스템에서는 백그라운드 작업에 대해 엄격한 제한을 두어 배터리 소모와 메모리 사용을 관리
예를 들어 YoutubeMusic으로 음악을 들으며 게임을 하고 있다면 YoutubeMusic은 background상태 게임은 Forground상태이다.
2. Thread
쉽게 생각하면 작업의 최소 단위 process가 만들어낸 일꾼같은 개념으로, process는 thread를 만들어 작업을 하나하나 처리함
Concurrency
여러 가지 일이 동시에 일어나는 개념으로, 멀티코어 CPU의 보급과 프로세서의 코어 수 증가로 인해 가용 할 수 있는 프로세서가 많아 지면서 Concurrency(병행성)을 활용해 성능을 올릴 수 있게 되었다.
과거에 Concurrency를 도입하기 위해서는 추가 thread를 생성해야 했지만, 복잡한 코드 작성과 수동으로 관리를 해줘야 하기 때문에 불편하고 또한 스레드를 잘못 관리한다면 성능상 문제점이 많아 지는 등 문제점들이 많다.
이러한 문제들을 해결 하기 위해 iOS는 전통적인 스레드 기반 시스템 및 애플리케이션에서 발견되는 문제를 해결하기 위해 "비동기적" 접근 방식을 사용하며 이로한 방식은 프로그램이 스레드를 스스로 만들고 관리하는 복잡함 없이 여러 작업을 효율적으로 동시에 처리 할 수 있게한다.
Concurrency는 프로그램이 동시에 여러 일을 할 수 있게 해주는 기술, iOS에서는 이를 쉽고 효율적으로 구현할 수 있는 방법을 제공
Concurrency and Application Design
The Move Away from Threads
OS X와 iOS는 스레드에 의존하는 대신 비동기적 디자인 접근 방식을 취하며 스레드를 직접 관리한 필요 없이 어떤 작업도 비동기적으로 수행할 수 있는 Grand Central Dispathch (GCD)를 제공한다.
GCD는 thread 관리 코드를 작성해줄 필요가 없게 한다.
작업을 정의하고 적절한 DisPatch queues에 전달해주면 GCD는 필요한 thread를 생성하고 생성된 thread는 작업을 스케줄링한다.
이렇게 thread를 시스템의 일부화 시켜 더 나은 효율성과 안정성을 제공한다.
Queues
DIspatch Queus
특징 | 설명 |
작업 관리 | 작업(함수 또는 블록)을 순차적으로 또는 동시에 실행할 수 있는 대기열. |
직렬(Serial) 실행 | 한 번에 하나의 작업만 실행하며, 추가된 순서대로 작업을 처리. |
병렬(Concurrent) 실행 | 여러 작업을 동시에 실행할 수 있으며, 작업을 병렬로 처리. |
메인 Dispatch Queue | UI 업데이트와 같이 메인 스레드에서 실행되어야 하는 작업을 관리. |
글로벌 Dispatch Queue | 일반적으로 백그라운드에서 수행되는 작업을 위한 병렬 큐. |
동기(sync) 실행 | 작업이 완료될 때까지 큐가 작업을 호출한 스레드를 차단. |
비동기(async) 실행 | 작업을 큐에 추가하고 바로 반환하여, 호출한 스레드가 계속 작업 수행. |
직렬 동기 | 하나의 작업이 완료될 때까지 다음 작업은 대기. 현재 스레드에서 순차적으로 실행. |
직렬 비동기 | 하나의 작업이 완료되기를 기다리지 않고 다음 작업으로 넘어감. 작업은 순차적으로 시작되지만, 현재 스레드는 대기하지 않음. |
병렬 동기 | 여러 작업을 동시에 시작하지만, 모든 작업이 완료될 때까지 현재 스레드는 대기. |
병렬 비동기 | 여러 작업을 동시에 시작하고, 현재 스레드는 작업 완료를 기다리지 않고 다음 작업으로 넘어감. |
1. 직렬 큐 (Serial Queue)
작업들이 한 번에 하나씩, 순서대로 처리됩니다. 직렬 큐는 작업이 이전 작업이 완료된 후에만 시작되도록 보장합니다.
2. 동시 큐 (Concurrent Queue)
여러 작업이 동시에 병렬로 처리됩니다. 이러한 큐는 여러 작업을 동시에 수행할 수 있어, 효율성을 높일 수 있습니다.
Dispatch Queues는 작업을 순차적으로 또는 동시에 실행하지만 항상 선입선출 순서로 작업
한 번에 하나의 작업만 수행하며 하나의 작업이 완료될 때까지 기다렸다가 새로운 작업을 시작한다.
처리 유형설명예시 코드
참고자료
https://tech.devsisters.com/posts/crunchy-concurrency-swift/
https://developer.apple.com/documentation/foundation/thread
'🍎swift' 카테고리의 다른 글
Swift 배열, 동시성 문제 (0) | 2024.04.04 |
---|---|
URLRequestBuilder만들기 .. feat 리팩토링 (0) | 2024.04.02 |
[Swift] Stroyboard Navigation Controller를 활용한 화면이동 (1) | 2023.12.21 |
제어 흐름 (Control Flow) (0) | 2023.11.21 |
text field 바꾸기 (플레이스 홀더, 클리어 버튼) (0) | 2023.04.21 |