GCDのQoSについてドキュメントを読み直す
(下書きに眠ってた記事。途中です🙇🏻♂️)
iOS/macOSのGrand Central Dispatch (GCD)で並列処理をしたい場合、こんな感じで書くと思う。
DispatchQueue.global(qos: .default).async {
...
}
何も考えずずーっとこう書いてたんだけど、個人開発でとある処理に時間がかかる機能を追加したときに、「CPUが空いているときによしなにバックグラウンドスレッドで処理を進めておきたい」と思い、それってもしかして上のglobalメソッドのqos引数に.background(最も優先度が低い)を指定するだけでいけちゃうんじゃない?と思ったのをきっかけに、そういえばこのDispatchQoSについてちゃんと理解してないなーと(今更)気付いたのだった。
というわけで記事を書きつつドキュメントをちゃんと読んでみようと思った次第。
このあたり:
https://developer.apple.com/documentation/dispatch/dispatchqos
DispatchQoSとは
A quality-of-service (QoS) class categorizes work to perform on a DispatchQueue. By specifying the quality of a task, you indicate its importance to your app. When scheduling tasks, the system prioritizes those that have higher service classes.
(QoSクラスは、DispatchQueueで実行する作業を分類します。タスクの品質を指定することで、アプリにとっての重要性を示します。タスクをスケジューリングする際、システムはサービスクラスが高いものを優先します。)
Because higher priority work is performed more quickly and with more resources than lower priority work, it typically requires more energy than lower priority work. Accurately specifying appropriate QoS classes for the work your app performs ensures that your app is responsive and energy efficient.
(優先度の高い作業は、優先度の低い作業よりも早く、より多くのリソースを使って実行されるため、通常、優先度の低い作業よりも多くのエネルギーを必要とします。アプリが実行する作業に適切なQoSクラスを正確に指定することで、アプリの応答性とエネルギー効率が向上します。)
要は優先度。
で、知りたいのは各QoSの細かい挙動。
DispatchQoSの種類
static letで以下の6つが定義されている。優先度順。
userInteractive
The quality-of-service class for user-interactive tasks, such as animations, event handling, or updates to your app's user interface. (アニメーション、イベント処理、アプリのユーザーインターフェースの更新など、ユーザーがインタラクティブに動作するタスクのためのサービス品質のクラスです。)
userInitiated
The quality-of-service class for tasks that prevent the user from actively using your app. (ユーザーがアプリを積極的に使用するのを妨げるタスクのためのサービス品質クラスです。)
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/