본문 바로가기
iOS/iOS

멀티 스레드(Multi Thread) 구현 시, 고려할 수 있는 방식

by 황민우 2022. 4. 1.

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

https://derek1119.github.io/%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%ED%95%98%EC%8B%9C%EC%98%A4

 

멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식

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

댓글