グランドセントラルディスパッチ(GCD)
Grand Central Dispatch(GCD)-AppleのMac OS XおよびiOSオペレーティングシステム用のテクノロジー-は、C言語の拡張機能、API、およびアプリケーション開発者が実行するコードのセクションを識別できるランタイムライブラリの組み合わせです。平行。 OpenMPと同様に、GCDはスレッド化の詳細のほとんどを管理します。 GCDは、ブロックと呼ばれるCおよびC++言語の拡張機能を識別します。ブロックは、単に自己完結型の作業単位です。これは、中括弧{}のペアの前に挿入されたカレットˆによって指定されます。ブロックの簡単な例を以下に示します−
{ ˆprintf("This is a block"); }
ブロックをディスパッチキューに配置することにより、実行時の実行用にブロックをスケジュールします。キューからブロックを削除すると、管理しているスレッドプールから使用可能なスレッドにブロックが割り当てられます。 GCDは、シリアルとコンカレントの2種類のディスパッチキューを識別します。シリアルキューに配置されたブロックは、FIFO順に削除されます。ブロックがキューから削除されると、別のブロックが削除される前に実行を完了する必要があります。各プロセスには、独自のシリアルキュー(メインキューと呼ばれます)があります。開発者は、特定のプロセスに対してローカルな追加のシリアルキューを作成できます。シリアルキューは、いくつかのタスクを順番に実行するのに役立ちます。並行キューに配置されたブロックもFIFO順に削除されますが、一度に複数のブロックを削除できるため、複数のブロックを並行して実行できます。システム全体の同時ディスパッチキューは3つあり、優先度に従って、低、デフォルト、高の3つに区別されます。優先度は、ブロックの相対的な重要性の概算を表します。簡単に言うと、優先度の高いブロックは、優先度の高いディスパッチキューに配置する必要があります。次のコードセグメントは、デフォルト優先度の同時キューを取得し、dispatch async()関数-
を使用してブロックをキューに送信する方法を示しています。dispatch_queue_t queue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch async(queue, ˆ{ printf("This is a block."); });
内部的には、GCDのスレッドプールはPOSIXスレッドで構成されています。 GCDはプールを積極的に管理し、アプリケーションの需要とシステム容量に応じてスレッドの数を増減できるようにします。
-
JavaScriptでのキューの実装
以下は、JavaScriptでキューを実装するためのコードです。 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>
-
同時実行の説明:マルチスレッド iOS アプリを構築する方法
iOS での同時実行は大きなトピックです。そこで、この記事では、キューと Grand Central Dispatch (GCD) フレームワークに関するサブトピックにズームインしたいと思います。 特に、シリアル キューと並行キューの違い、および同期実行と非同期実行の違いを調べたいと思います。 これまで GCD を使用したことがない場合は、この記事から始めることをお勧めします。 GCD の経験があり、上記のトピックにまだ興味がある場合は、それでも役立つと思います。そして、途中で新しいことを 1 つまたは 2 つ取り上げていただければ幸いです。 この記事の概念を視覚的に示すために、Sw