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. (ユーザーがアプリを積極的に使用するのを妨げるタスクのためのサービス品質クラスです。)

ここから先は

1,506字
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/