[ swift - 스레드와 비동기 ]

Yr Yr·2023년 12월 8일

TIL

목록 보기
14/39

스레드란?

  • 컴퓨터 프로세스 내에서 실행되는 실행 흐름의 단위. 프로세스는 운영체제로부터 자원을 할당받아 실행 중인 프로그램의 인스턴스를 나타내는데, 각각의 프로세스는 하나 이상의 스레드를 가질 수 있다.
  • swift에서의 스레드
  • 메인 스레드: 애플리케이션의 주요 인터페이스 및 UI 업데이트를 담당하는 스레드이다. UI 요소의 변경은 메인 스레드에서 수행되어야 한다.
  • 백그라운드 스레드: 메인 스레드 이외에 동시에 작업을 수행하기 위해 생성되는 스레드들을 일컫는다. 주로 작업을 분산하거나 병렬로 처리할 때 사용된다.

비동기란?

- 동기: 작업이 순차적으로 실행되는 것을 의미한다.

- 비동기: 작업이 별도의 스레드 또는 백그라운드에서 실행되며, 다른 작업을 기다리지 않고 동시에 실행된다. 작업이 완료되면 콜백 또는 완료 핸들러를 통해 결과를 처리한다. 메서드 호출 순서대로 작업이 완료된다는 것이 보장되지 않는다.

- DispatchQueue: Grand Central Dispatch(GCD)는 애플 플랫폼에서 멀티스레드 프로그래밍을 간단하고 효율적으로 구현하기 위한 기술이다. GCD는 다양한 작업을 관리하고 실행하기 위한 강력한 API를 제공하여 병렬성을 활용할 수 있게 해준다.

- GCD의 특징

  • 큐 기반의 작업 관리: 큐를 통해 작업을 세분화하고 실행할 큐에 따라 작업의 속성을 결정할 수 있다.
  • 간편한 비동기 작업 처리: GCD를 사용하면 비동기적으로 작업을 수행할 수 있다. 별도의 스레드를 관리하지 않아도 되므로 개발을 간편하게 만든다.
  • 큐의 종류에 따른 다양한 동작 방식: GCD에는 Serial Queue와 Concurrent Queue가 있다. Serial Queue는 작업이 순차적으로 실행되며 Concurrent Queue는 여러 작업이 동시에 실행될 수 있다.
  • 콜백을 통한 작업 완료 처리: 작업이 완료되면 콜백(클로저)을 사용하여 결과를 처리할 수 있다.
  • Qos(Quality of Service) 지원: GCD는 각 큐에 대한 우선순위 설정을 지원하여 시스템이 작업을 적절히 관리하고 최적의 성능을 유지할 수 있도록 한다.

- DispatchQueue.main

  • 주로 앱의 UI 업데이트와 관련된 작업을 처리하는데 사용된다.
  • 메인 스레드에서 동작하며 주로 UI를 업데이트하거나 사용자와의 상호작용을 처리할 때 사용된다.
  • UI 업데이트나 사용자 이벤트 처리와 같이 메인 스레드에서 실행되어야 하는 작업들은 DispatchQueue.main을 통해 실행된다.
  • 메인스레드는 UI와 관련된 작업들을 담당하기 때문에 주의해서 사용하지 않으면 UI의 응답성이 떨어질 수 있다. 긴 작업이 메인 스레드에서 실행되면 앱이 멈추거나 뚝뚝 끊기는 현상이 발생할 수 있다.

- DispatchQueue.global()

  • 전역(백그라운드) 스레드에서 작업을 처리하는 데 사용된다.
  • 여러 스레드에서 동시에 실행되는 비동기 작업을 처리할 때 유용하다.
  • 전역 DispatchQueue에서 async 또는 sync를 사용하여 작업을 추가하면 해당 작업은 백그라운드에서 실행된다.

0개의 댓글