티스토리 뷰
공식 문서
Apple Developer Document - OperationQueue
OperationQueue
OperationQueue(작업 대기열)는 작업 실행을 관리하는 큐이다. Foundation프레임워크의 Task Management기능 중 하나이다.
Declation
class OperationQueue: NSObject
OverView
Operating Queue는 우선 순위와 준비상태에 따라 대기 중인 Operation(작업)을 실행한다. Operating Queue에 작업이 추가된 후엔 작업이 끝났다고 보고될 때까지 Operating Queue에 작업이 남아있게 된다. Operating Queue에 추가된 작업을 직접적으로 제거할 순 없다. 하나의 작업은 끝날 때까지 Operating Queue에 유지되며 Operating Queue는 모든 작업이 끝날 때까지 유지된다. 만약 Operating Queue를 완료되지 않은 작업으로 일시 중단하면 메모리 누수가 발생할 수 있다. Operating Queue의 좀 더 많은 사용법은 Concurrency Programming Guide를 참고하면 된다.
Determining Execution Order
Operating Queue의 Operation(작업)은 준비 상태, 우선 순위, 상호 운용 종속성에 따라 구성되고 실행된다. Operating Queue속의 모든 작업들이 동일한 우선순위를 가지고 있고 준비 상태가 true 일 경우 Operating Queue에 들어온 순서대로 실행되게 된다. 이는 일반적인 Queue의 동작원리인 FIFO와 동일하다. 앞의 상황이 아닌 작업들이 다른 우선순위를 가진 상태라면 가장 높은 우선순위의 작업을 실행한다. 그러나 작업의 준비 상태 변경으로 인해 실행 순서가 변경될 수 있기 때문에 작업 순서를 보장하기 위해 queue semantics에 너무 의존하면 안 된다. Interoperation dependencies(상호 운용 종속성)는 작업들이 다른 Operating Queue에 있더라도 절대적인 실행 순서를 제공한다. 한 작업에 종속된 작업들이 모두 끝나기 전 까지는 해당 작업이 실행 준비가 된 것으로 보지 않는다. 이러한 부분은 Operation 문서의 Managing Dependencies에서 자세히 알아볼 수 있다.
Canceling Operaions
작업을 완료한다는 것이 반드시 해당 작업을 수행했다는것은 아니다. 이는 작업을 취소할 수 있기 때문인데 작업을 취소하게 되면 Operating Queue에 남아는 있지만 최대한 빨리 중단해야 한다는 것을 해당 작업에게 알린다. 현재 진행 중인 작업이 취소가 된다는 것은 작업이 중단되어야 한다는 것을 인지하고 이를 완료된 것으로 표시해야 한다는 것을 의미한다. 이와 다르게 Operating Queue에 있지만 아직 실행되지 않은 작업의 경우 작업의 start() 메서드를 호출하여 작업을 바로 취소하고 완료된 것으로 표시해야 한다. 이러한 작업 취소는 Operation문서의 Responding to the Cancel Command에서 자세히 알아볼 수 있다.
KVO-Compliant Properties
Operating Queue 클래스는 key-value coding(KVC), key-value-observing(KVO)를 준수한다. 프로그램의 다른 부분을 제어하기 위해 몇 가지 프로퍼티를 프로퍼티 옵저버를 사용해 관찰할 수 있는데 해당 프로퍼티들은 다음과 같다.
이러한 프로퍼티에 프로퍼티 옵저버를 사용할 수 있지만 Cocoa 바인딩을 사용자 인터페이스 요소에 바인딩해서는 안된다. 사용자 인터페이스와 관련된 코드는 일반적으로 main 스레드에서만 실행해야 한다. 하지만 Operating Queue와 관련된 KVO 알림은 모든 스레드에서 발생할 수 있다. 이러한 KVO와 작업에 옵저버를 사용하는 방법은 Key-Value Observing Programming Guide에서 자세히 알아볼 수 있다.
Thread Safety
어떠한 객체에 대해 접근을 동기화하기 위해 추가적인 lock을 생성하지 않고 여러개의 스레드에서 하나의 Operating Queue를 사용하는 것이 안전하다. Operating Queue는 Dispatch 프레임워크를 사용하여 작업을 시작하게 된다. 결과적으로 각각의 작업들은 동기식, 비동기식에 관계없이 항상 별도의 스레드에서 실행된다.
Topics
Accessing Specific Operation Queues
class var main: OperationQueue
// main 스레드와 관련된 Operation Queue를 반환한다.
class var current: OperationQueue?
// 현재 작업을 실행중인 Operation Queue를 반환한다.
Managing Operations in the Queue
func addOperation(Operation)
// Operation Queue에 특정 작업을 추가한다.
func addOperations([Operation], waitUntilFinished: Bool)
// Operation Queue에 작업들을 추가한다.
func addOperations(() -> Void)
// 작업에서 지정된 블록을 래핑하여 Operation Queue에 추가한다.
func cancelAllOperations()
// Operation Queue의 모든 작업을 취소한다.
func waitUntilAllOperationsAreFinished()
// 실행중인 작업이 완료 될 때까지 현재 스레드를 차단한다.
Managing the Execution of Operations
var qualityOfService: QualityOfService
// 어떠한 작업의 시스템 리소스에 접근 할 수 있는 우선순위에 영향을 주는 서비스 레벨의 기본 값
var maxConcurrentOperationCount: Int
// 동시에 실행할 수 있는 작업 수
class let defaultMaxConcurrentOperationCount: Int
// queue에서 동시에 실행될 기본 최대 작업 수
Suspending Execution
var isSuspended: Bool
// 큐가 실행을 위해 작업을 잘 스케줄링하는지에 대한 여부
Configuring the Queue
var name: String?
// Operation Queue의 이름
var underlyingQueue: DispatchQueue?
// 작업을 실행하는 데 사용되는 디스패치 큐
Instance Properties
var minimumTolerance: OperationQueue.SchedulerTimeType.Stride
//
var now: OperationQueue.SchedulerTimeType
//
var progress: Progress
//
Instance Methods
func addBarrierBlock(() -> Void)
//
func schedule(after: OperationQueue.SchedulerTimeType, interval: OperationQueue.SchedulerTimeType.Stride, tolerance: OperationQueue.SchedulerTimeType.Stride, options: OperationQueue.SchedulerOptions?, () -> Void) -> Cancellable
//
func schedule(after: OperationQueue.SchedulerTimeType, tolerance: OperationQueue.SchedulerTimeType.Stride, options: OperationQueue.SchedulerOptions?, () -> Void)
//
func schedule(options: OperationQueue.SchedulerOptions?, () -> Void)
//
Structures
struct OperationQueue.SchedulerOptions
struct OperationQueue.SchedulerTimeType
'iOS > iOS_Documents' 카테고리의 다른 글
[iOS 앱개발 기초] Concurrency Programming Guide (동시성 프로그래밍 가이드) (0) | 2020.07.29 |
---|---|
[iOS 앱개발 프로그래밍] Foundation - Operation (0) | 2020.07.29 |
[iOS 앱개발 프로그래밍] UIKit - Table View - UITableView (0) | 2020.07.18 |
[iOS 앱개발 프로그래밍]UIKit - Table View - UITableViewDelegate (1) | 2020.07.18 |
[iOS 앱개발 프로그래밍] UIKit - Table View - UITableViewDataSource (0) | 2020.07.18 |
- Total
- Today
- Yesterday
- Combine
- dfs
- 스위프트
- OS
- 코테
- 테이블뷰
- System
- Publisher
- IOS
- Xcode
- design
- 문법
- BFS
- 알고리즘
- Swift
- operating
- document
- 프로그래밍
- OSTEP
- mac
- 코딩테스트
- 동시성
- 아이폰
- pattern
- 자료구조
- 앱개발
- operator
- Apple
- 백준
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |