次の文を考えてみてください。単純な死の可能性はどのようにして順列を並べ替えることができますか?DispatchQueue QOS混乱
答えて
一般的に、これらのすべての並べ替えを並べ替えるべきではありません。ほとんどの場合、あまりにも多くのQoSを混乱させることは、トラブルのレシピです。しかし、かなり単純なルールがあります。
キューには優先度があり、継承を要求するブロックに優先度を割り当てることができます。
この特定のブロックは明示的に低いプライオリティを要求していますが、「自分のQoS要求を無視します」と表示されます。原則として、そうしないでください。私がそれを行うために知っている唯一の理由は、QoSを理解していないいくつかのレガシーAPIとやり取りしている場合です。 (これは決して自分自身に遭遇したことはありません。ユーザレベルのコードでは想像するのは難しいです。)
さらに興味深い質問IMO(そして実際のコードではもっと頻繁に現れます)
DispatchQueue.global(qos: .utility).async(qos: .userInitiated) {}
このブロックの優先度は?答えは.userInitiated
であり、ブロックは実行が終了するまでその優先度をキューに「ローン」します。だから、ある期間、このキュー全体は.userInitiated
になります。これは、優先度の逆転(高優先度タスクが低優先度タスクを待つブロック)を防止するためです。
これはすべて、些細なGCDに関心のある人にとっては必見の、Concurrent Programming With GCD in Swift 3に詳しく説明されています。
ありがとう、ロブ。もう一度ビデオを試してみる。ちょっと私が最初に覚えていたのは:-) – Verticon
最初はロブの答えを理解できませんでした。今私はそう思います。私はチャイムに戻ってきます。おそらくそれは私のような別の人を助けるでしょう。 DispatchQueueのQoSは、キューのサービス頻度を決定します。アイテムがキューからどのくらい素早く引き出され、スレッドに割り当てられ、したがって実行の候補になるか。 (これらのスレッドの優先順位は、さらに調査するための問題です)。 <次のコメントに続き> – Verticon
.userInitiatedアイテムが送信されるときに、グローバルな.utilityキューに50個の.utilityアイテムがあるとします。キューのQOSを一時的に.userInitiatedに上げると、それがより頻繁にサービスされ、結果として50 "先行する"アイテムがより急速に取り除かれ、.userInitiatedアイテムが待ち行列からすぐに引き出されるされました。これは私の現在の理解です。学習を続けましょう。 – Verticon
- 1. [遊び場]私はDispatchQueueとDispatchSemaphore.Like次の例で混乱していますDispatchQueueとDispatchSemaphore
- 2. 事業部の混乱混乱
- 3. C++ - 演算子の混乱の混乱
- 4. 混乱、
- 5. 混乱
- 6. 混乱
- 7. 混乱
- 8. 混乱
- 9. 混乱
- 10. 混乱
- 11. 混乱
- 12. 混乱
- 13. 混乱クエリ
- 14. ポインタの混乱
- 15. メソッドバインディングの混乱
- 16. C++クラス/混乱
- 17. リアクションマップの混乱
- 18. 資産混乱
- 19. self.bounds混乱
- 20. JDBCJobStore混乱Schdular
- 21. 混乱が
- 22. 注釈混乱
- 23. sumSeriesWithWildcard混乱
- 24. MD5ハッシュ混乱
- 25. 混乱(アンドロイド)
- 26. データベーススキーマの混乱
- 27. Modelchoicefieldクエリセット混乱
- 28. カルマカバレッジレポート混乱
- 29. CSSの混乱
- 30. 混乱PHPプログラム
DispatchQueue.globalのように見えます... –
@Duncan 2つあります。 1つは非推奨、もう1つは非推奨です。 https://developer.apple.com/reference/dispatch/dispatchqueue – Verticon
私はそれを考え出しました。 Derp ... –