3

キューの種類の違いを理解しようとしています。私が理解しているように、3つのタイプがあります:

  • グローバルキュー-同時-ブロックは、順序に関係なくできるだけ早く実行されます
  • メインキュー-シリアル-ブロックは送信されたときに実行されます
  • プライベートキュー-シリアル

私が疑問に思っているのは、各種類のキューに送信されたときのdispatch_syncとdispatch_asyncの違いは何ですか?これは私がこれまでにそれを理解する方法です:

dispatch_sync(global_queue)^
{
     // blocks are executed one after the other in no particular order
     // example: block 3 executes. when it finishes block 7 executes.
}

dispatch_async(global_queue)^
{
     // blocks are executed concurrently in no particular order
     // example: blocks 2,4,5,7 execute at the same time.
}

dispatch_sync(main_queue)^
{
     // blocks are executed one after the other in the order they were submitted
     // example: block 1 executes. when it finishes block 2 will execute and so forth.
}

dispatch_async(main_queue)^
{
     // blocks are executed concurrently in the order they were submitted
     // example: blocks 1-4 (or whatever amount of threads the system can handle at one time) will fire at the same time. 
     // when the first block completes block 5 will then execute.
}

これに対する私の認識がどれだけ正しいか知りたいのですが。

4

1 に答える 1

2

dispatch_sync と dispatch_async の違いは、Windows API の sendmessage と postmessage のようなものです。dispatch_sync ディスパッチ キューで実行するブロック オブジェクトを送信し、そのブロックが完了するまで待機します。dispatch_async ディスパッチ キューでの非同期実行のためにブロックを送信し、すぐに戻ります。

ターゲット キューは、同じキューに送信された他のブロックに関して、ブロックが順次または同時に呼び出されるかどうかを決定します。独立したシリアル キューは、相互に同時に処理されます。

質問を投稿する前に、最初にドキュメントを注意深く読む必要があります。

于 2012-08-04T04:29:00.477 に答える