[解決済み] GCDにおける並列キューと直列キュー
2022-06-05 01:44:45
質問
GCD の並列キューと直列キューを完全に理解するのに苦労しています。私はいくつかの問題を持っており、誰かが私に明確に、ポイントで答えることができることを望んでいます。
-
私は、シリアルキューが、タスクを次々に実行するために作成され、使用されることを読んでいます。しかし、次のような場合はどうなるでしょうか。
- シリアルキューを作成する
-
私は
dispatch_async
(を 3 回使用して、3 つのブロック A,B,C をディスパッチしています。
3つのブロックは実行されるのでしょうか。
-
キューは直列なので、A,B,Cの順で実行されます。
または
- ASYNCディスパッチを使用しているため、同時(並列スレッドで同時)には
-
を使うことができると読んでいます。
dispatch_sync
を使用することができると読みました。その場合、私が望むだけのブロックを同期的にディスパッチできる同時実行キューを常に使用することができるので、なぜシリアルキューは存在するのでしょうか?良い説明をありがとうございました!
どのように解決するのですか?
単純な例ですが、実行に1分かかるブロックがあるとします。それをメインスレッドからキューに追加します。4つのケースを見てみましょう。
- async - 同時実行: コードはバックグラウンド スレッドで実行されます。制御はメイン スレッド (および UI) にすぐに戻ります。ブロックは、それがそのキューで実行されている唯一のブロックであると仮定することはできません。
- async - serial: コードはバックグラウンドのスレッドで実行されます。制御はメインスレッドに即座に戻ります。ブロックは は は、そのキューで実行されている唯一のブロックであると仮定します。
- sync - 同時実行: コードはバックグラウンド スレッドで実行されますが、メイン スレッドはコードが終了するのを待ち、UI の更新をブロックします。ブロックは、そのキューで実行されている唯一のブロックであると仮定することはできません (数秒前に async を使用して別のブロックを追加することができます)。
- sync - serial: コードはバックグラウンドスレッドで実行されますが、メインスレッドはそれが終了するのを待ち、UI へのいかなる更新もブロックします。ブロックは は ブロックは、そのキューで実行されている唯一のブロックであると仮定します。
明らかに、最後の 2 つは長時間実行されるプロセスには使用しません。通常は、別のスレッドで実行されている可能性のあるものから UI (常にメイン スレッド) を更新しようとしているときに使用されます。
関連
-
[解決済み] dispatch_after - GCD in Swift?
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] ぼかしの入ったオーバーレイビューの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JenkinsがIOSを自動パッケージングしてモミを配布
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] Swiftの配列を文字列に変換するには?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] swiftで電子メールアドレスを検証する方法は?