Multi Thread 정의
- 하나의 프로세스 내에서 여러 개의 스레드가 존재하고, 여러 개의 스레드가 동시에 진행되는 것입니다.
- 스레드들은 프로세스의 자원을 공유하지만, 독립적으로 실행되는 구조입니다.
Multi Thread 장점
- 메모리 공간과 시스템 자원 소모가 줄어든다.
- 프로세스 간 통신 방법에 비해 스레드 간에 통신 방법이 간단하다. (= 별도의 자원을 이용하지 않고, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용하여 데이터를 주고받음.)
Multi Thread 단점
- 동일한 자원에서 동시에 접근했을 경우 이상한(엉뚱한) 값을 읽어올 수 있다.
- 병목현상이 발생하여 성능이 저하될 가능성이 있다.
Multi Thread 프로그래밍 시 고려해야 할 점
- UI 업데이트에 관련된 작업들은 메인 스레드에서 구현해야 합니다.
- 많은 양의 데이터를 처리하는 것과 같은 작업은 백그라운드에서 하는 것이 좋습니다.
- 스레드에 안전하지 않은 변수는 서로 다른 스레드에서 동시에 접근하면 위험하기 때문에 주의해야 합니다.
멀티 스레드로 작동하는 앱을 작성할 때 고려할 수 있는 방식
1, Mutable, Immutable
- Immutable 한 인스턴스는 스레드에 안전합니다. (=여러 스레드에서 한 번에 접근해도 문제가 되지 않습니다.)
- Mutable 한 인스턴스는 스레드에 안전하지 않지만, 읽기 전용으로만 사용한다면 문제가 되지 않습니다.
(Mutable 한 인스턴스를 하나 이상의 스레드에서 변경한다면 문제가 발생할 수 있습니다.)
2, GCD
- Swift에서 스레드 관련 작업은 GCD API를 통해 처리합니다.
- GCD는 클로저 블록 안에 있는 특정 작업을 큐에 올리고, 해당 큐를 특정 스레드에 실행시키는 방식입니다.
2022.03.24 - [iOS/iOS 면접 질문] - GCD [ Grand Central Dispatch ]
GCD [ Grand Central Dispatch ]
정의 - Background에서 스레드를 관리하면서 동시적으로 작업을 실행시켜주는 저수준 API를 제공하는 라이브러리 - 애플에서 제공하는 API로, 멀티스레딩 처리를 쉽고 편하게 해 줍니다. - 앱을 실행
seagreen83.tistory.com
3, Async / Sync
- Async (비동기)
: 작업을 요청하고 응답을 기다리지 않은 채 다음 작업을 진행합니다.
- Sync (동기)
: 작업을 요청하고 응답이 올 때까지 다른 작업으로 진행하지 않고, 응답이 오면 다음 작업을 진행합니다.
2022.03.09 - [iOS/iOS 면접 질문] - 동기/비동기, 직렬/동시
동기/비동기, 직렬/동시
스레드란 [ thread ] ? - 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말합니다. - 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘
seagreen83.tistory.com
4, QoS
- 작업마다 중요도를 지정해, 순위에 따라 작업을 진행합니다.
- User-interactive = 즉시 완료해야 하는 작업을 나타냄 (높은 중요도)
- User-initiated = 사용자 상호 작용을 계속하는데 필요한 작업을 대기 중일 때 사용 (두 번째로 높은 중요도)
- User-default = 우선순위를 신경 쓰지 않는 작업을 나타냄 (중요한 정도가 상관없음)
- Utility = 사용자에게 표시되는 진행률 표시가 있는 장기 실행 작업을 나타냄 (시간이 오래 걸리는 작업)
- Background = 사용자가 직접 알지 못하는 작업을 나타냄 (사용자한테 당장 인식될 필요가 없는 작업)
- 다음 링크 글 맨 아래 부분에 QoS 나옵니다.
2022.03.24 - [iOS/iOS 면접 질문] - GCD [ Grand Central Dispatch ]
GCD [ Grand Central Dispatch ]
정의 - Background에서 스레드를 관리하면서 동시적으로 작업을 실행시켜주는 저수준 API를 제공하는 라이브러리 - 애플에서 제공하는 API로, 멀티스레딩 처리를 쉽고 편하게 해 줍니다. - 앱을 실행
seagreen83.tistory.com
내용 출처
https://www.notion.so/7cbd401ce83e45d2a1152b342c574799
멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명하시오.
내가 아는 내용
www.notion.so
https://gwangyonglee.tistory.com/47
[iOS] 멀티 스레드(Multi Thread) 구현 시 고려해야될 것들
안녕하세요. iOS앱을 개발하면서 멀티 스레드로 앱을 구현하다보면 예상하지도 못한 곳에서 죽는 경우를 경험해보셨을 것입니다. 그래서 이번 글에서는 멀티 스레드를 구현하면서 고려해야될
gwangyonglee.tistory.com
멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식
1. GCD / Operation
derek1119.github.io
'iOS > iOS' 카테고리의 다른 글
NotificationCenter 동작 방식과 활용 방안 (0) | 2022.04.06 |
---|---|
OOP, FP (0) | 2022.04.05 |
String은 왜 subscript로 접근이 안되는가? (0) | 2022.03.30 |
Main Thread (0) | 2022.03.29 |
URLSession (이론) (0) | 2022.03.28 |
댓글