멀티 스레드
여러 개의 스레드가 동시에 작업을 처리하는 것을 의미한다.
하나의 프로세스 내부에는 여러 개의 스레드가 존재하고, 스레드들은 프로세스의 자원을 공유하고 독립적으로 실행된다.
장점
- 메모리 공간과 시스템 자원 소모가 줄어든다.
- 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 간단하다.
단점
- 서로 다른 스레드가 데이터와 Heap 영역을 공유하므로 다른 스레드가 사용 중인 변수나 자료구조에 접근하는 경우 이상한 값을 얻을 수 있다.
- 병목현상으로 인해 성능이 저하될 수 있다.
멀티 스레딩 프로그래밍 시 고려해야 할 것
Mutable, Immutable
- Immutable 인스턴스는 Thread-safe 하다.
- Mutable 인스턴스는 Thread-safe 하지 않지만 읽기 전용으로 사용한다면 문제 되지 않는다.
프로퍼티 속성
atomic
어떤 프로퍼티를 두 개의 스레드가 참조하고 있는 상황에서 해당 프로퍼티 접근자 메서드가 atomic하지 않는다면 값에 대한 싱크가 맞지 않아 문제가 발생할 수 있습니다. 이런 경우에 atomic으로 설정되어야 합니다.
nonatomic
Mutable한 인스턴스가 변경 중에 동시 접근할 경우가 없다면 nonatomic으로 사용한다.
Synchronized
스레드가 동시에 접근할 수 없도록 막고 싶을 때 해당 부분을 Lock을 걸 수 있다.
sync | 작업이 끝나는 것을 기다렸다 실행 |
async | 기다리지 않고 바로 실행 |
GCD(Grand Central Dispatch)
Swift에서는 스레드 작업은 GCD API를 통해 처리한다.
GCD는 클로저 블록 안에 특정 작업을 큐에 올리고, 해당 큐를 특정 스레드에 실행하는 방식이다.
Class, Struct
struct는 값 타입으로 매개변수로 전달될 때 Thread-Safe하다.
# 참고한 사이트
- https://gwangyonglee.tistory.com/47
- https://velog.io/@hayeon/%EB%A9%80%ED%8B%B0-%EC%93%B0%EB%A0%88%EB%93%9C%EB%A1%9C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94-%EC%95%B1%EC%9D%84-%EC%9E%91%EC%84%B1%ED%95%98%EA%B3%A0-%EC%8B%B6%EC%9D%84-%EB%95%8C-%EA%B3%A0%EB%A0%A4%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%B0%A9%EC%8B%9D%EB%93%A4%EC%9D%84-%EC%84%A4%EB%AA%85
'iOS > Swift 상식' 카테고리의 다른 글
POP(Protocol Oriented Programming) vs OOP(Object Oriented Programming) (0) | 2023.02.21 |
---|---|
프로토콜이란? (0) | 2023.02.21 |
Delegates vs Notification 동작 방식 (0) | 2023.02.18 |
KVO(Key Value Observing) 동작 방식 (0) | 2023.02.11 |
Singleton 패턴 알아보기 (0) | 2023.02.05 |