[Swift] Thread

Bibi·2022년 1월 26일
0

[Swift] Thread

https://developer.apple.com/documentation/foundation/thread/

Declaration

class Thread: NSObject

Overview

  • 긴 작업을 수행해야 하지만, 애플리케이션의 나머지 실행을 블로킹(block)하고 싶지 않을 때 유용하다.
  • 특히 유저 인터페이스와 이벤트 관련 활동을 다루는 애플리케이션의 메인 스레드 블로킹을 피하기 위해 스레드를 사용할 수 있다.
  • 또한 큰 작업을 여러 작은 작업으로 나누기 위해 사용될 수 있다 - 멀티 코어 컴퓨터에서 성능을 높일 수 있다.

Thread 클래스는 스레드의 런타임 상태를 모니터링하기 위한 체계를 지원한다.

스레드의 실행을 취소하거나, 스레드가 실행중인지 작업을 완료했는지를 결정할 수 있다. 스레드 실행 취소는 당신의 스레드 코드로부터의 지원이 필요하다 - cancel() 설명 참조.

Subclassing Notes

스레드의 메인 엔트리 포인트를 구현하기 위해 Thread를 서브클래스로 하고 main() 메서드를 오버라이딩할 수 있다. main() 을 오버라이딩하면, 상속된 메서드를 부르기 위해 super를 호출할 필요가 없다.


NSThread 객체 초기화하기

  • init()
    • 초기화된 NSThread 객체 반환
  • init(target: Any, selector: Selector, object: Any?)
    • 주어진 매개변수를 갖는 초기화된 NSThread 객체 반환

Thread 시작하기

  • class func detachNewThreadSelector(Selector, toTarget: Any, with: Any?)
    • 새 스레드를 분리하고 스레드의 엔트리 포인트로서 특정 셀렉터를 사용
  • func start()
    • 리시버를 시작
  • func main()
    • 스레드를 위한 메인 엔트리 포인트 루틴

Thread 멈추기

  • class func sleep(until: Date)
    • 특정 시간까지 현재 스레드를 블로킹함
  • class func sleep(forTimeInterval: TimeInterval)
    • 주어진 타임 인터벌 동안 스레드를 잠재움(?)
  • class func exit()
    • 현재 스레드를 종결시킴
  • func cancel()
    • 리시버의 취소된 상태를 종료되어야 함을 나타내도록 변화시킴

Thread 의 실행 상태를 결정하기

  • var isExcuting: Bool
    • 리시버가 실행 중인지 아닌지를 나타내는 불리언 값.
  • var isFinished: Bool
    • 리시버가 실행을 완료했는지 아닌지를 나타내는 불리언 값.
  • var isCancelled: Bool
    • 리시버가 취소되었는지 아닌지를 나타내는 불리언 값.

Main Thread 작업하기

  • class var isMainThread: Bool
    • 현재 스레드가 메인 스레드인지 아닌지를 나타내는 불리언 값을 반환
  • var isMainThread: Bool
    • 리시버가 메인 스레드인지 아닌지를 나타내는 불리언 값
  • class var main: Thread
    • 메인 스레드를 나타내는 NSThread 객체를 반환

환경 질의

  • class func isMultiThreaded() -> Bool
    • 애플리케이션이 멀티스레드 상태인지 아닌지를 반환함
  • class var current: Thread
    • 현재 실행 스레드를 나타내는 Thread 객체를 반환함
  • class var callStackReturnAddresses: [NSNumber]
    • 콜 스택 리턴 주소들을 담은 배열을 반환함
  • class var callStackSymbols: [String]
    • 콜 스택 심벌을 담은 배열을 반환함

Thread 프로퍼티 다루기

  • var threadDictionary: NSMutableDictionary
    • 스레드 객체의 딕셔너리
  • let NSAssertionHandleerKey: String
  • var name: String?
    • 리시버의 이름
  • var stackSize: Int
    • 바이트로 한 리시버의 스택 사이즈

Thread 우선순위 작업

  • var qualityOfService: QualityOfService
  • enum QualityOfService
    • 시스템에 대한 작업의 중요도와 특징을 나타내는 상수들
  • class func threadPriority() -> Double
    • 현재 스레드의 우선순위를 반환
  • var threadPriority: Double
    • 리시버의 우선순위
  • class func setThreadPriority(Double) -> Bool
    • 현재 스레드의 우선순위를 설정

알림

  • static let NSDidBecomeSingleThreaded: NSNotification.Name
    • 구현되지 않음(?)
  • static let NSThreadWillExit: NSNotification.Name
    • NSThread 객체는 스레드 종료 전에 exit() 메시지를 받았을 때 이 알림을 발행. 이 알림을 받은 옵저버 메서드 호출이 종료되는 스레드에서 종료 전에 실행된다.
  • static let NSWillBecomeMultiThreaded: NSNotification.Name
    • 현재 스레드로부터 첫 번째 스레드가 분리되었을 때 발행됨. NSThread 클래스는 이 알림을 최대 한 번 발행한다 - detachNewThreadSelector(_:toTarget:with:) 를 사용해 스레드가 처음 분리되었을 때, 또는 start() 메서드에서. 이러한 메서드들의 후속 호출은 이 알림을 발행하지 않는다. 이 알림의 옵저버들은 (새 스레드가 아닌)메인 스레드에서 호출되는 알림 메서드를 가진다. 옵저버 알림 메서드는 새 스레드가 실행을 시작하기 전에 항상 실행된다.

이니셜라이저

  • init(block: () -> Void)

타입 메서드

  • class func detachNewThread(() -> Void)

0개의 댓글