[iOS] GCD (Grand Central Dispatch)


GCD

  • Grand Central Dispatch(GCD)
  • は、以前はプロセッサクロック速度を向上させるように演算速度を向上させていたが、消費電力やプロセッサクロック速度の増加が限られているため、マルチコア処理が誕生し、このような処理では、複数のプロセスにプログラムをどのように割り当てるかが重要になってきた.
  • GCD以前はThreadやOperationQueueなどのクラスを用いてマルチスレッド処理を行っていたが,様々な理由でスレッドが複雑で管理が困難であり,OperationQueueはGCDよりも重く,大量のBoilerPlateコードが必要であった.
  • GCDは、スレッド管理および実行の責任をアプリケーションレベルからオペレーティングシステムレベルに移行するアプリケーションによって開発されたテクノロジーです.作業単位はブロック(sweeftではモジュール式)と呼ばれ、DispatchQueueはこれらのブロックを管理しています.
  • アップルの公式文書でもThreadクラスではなくGCDを使用することをお勧めします!
  • DispatchQueue

  • GCDは、アプリケーションがブロックオブジェクトとしてタスクを転送するFIFOキューを提供し、管理する.
  • キュー内のタスクは、システム管理スレッドプールで実行されます.
  • DispatchQueueは2種類に分けられ、いずれもFIFOで処理される.(シリアル/同時)
    同期プログラミングは「論理用語で同時に実行されるように見える」が、実際には完全に同時に実行されるわけではない.シングルコア同期マルチタスク処理は、各スレッドが並列に実行されているように見えますが、実際には適切なインタラクション方式です.これとは異なり、パラレルプログラミングは実際には同時実行されます.よく区別しなければなりません.これに対して、Boost Cossは、銀行では、1人の銀行員がN個のキューに対して同期プログラミングであり、N個の銀行員がN個のキューに対して並列プログラミングである良い例を示した.

    したがって,同期は単一,マルチコア環境でも実現できるが,並列性はマルチコア環境でなければ実現できない.銀行員はどれだけの仕事が必要なのか.
  • アプリケーションを実行すると、メインスレッド上で実行されるMainキュー(オートミール)が自動的に作成されてタスクが実行されます.また、複数の同時キューが作成されてキューが管理されます.
  • 各タスクは同期または非同期で実行できますが、プライマリ・キュー列では非同期のみを使用する必要があります.さもないと他のものを処理するのをやめて、死神?このような現象が発生します...
  • DispatchQueueが提供するQueueにはMainとGlobalの2種類があります.
  • main

  • UIに関連するすべての操作は、シリアル・キューに相当するプライマリ・キューによって行われる必要があります.
  • MainQueueをsyncメソッドとして実行すると、ハングアップ状態になるので必須!asyncとして使用するべきです.
  • DispatchQueue.main.async { }

    global

  • UI以外のタスクに使用されるのは、Concurrent Queueに相当します.
  • sync、asyncはいずれも使用可能です.
  • 優先度設定は
  • QoSレベルを指定できます.
  • 優先度が高いほど、実行速度が速くなり、消費電力が多くなるほど、効率的な作業を実現するには、適切なQoSを指定する必要があります.
  • ユーザインタラクション:直ちに応答し、メインスレッド上で実行するインタフェースのリフレッシュ、アニメーション操作などのインスタントインタラクション操作を必要とするユーザに割り当てられる.
  • ユーザによるインタラクティブな活動
  • アプリケーションツール:数秒から数分の遅い動作で、反応性、性能、エネルギー効率のバランスが取れ、NSOperationクラスでは
  • がデフォルトです.
  • default:デフォルト値、ユーザー開始およびアプリケーションツールの中間値
  • Unspecificed:システム判定QoSを指定します.
  • DispatchQueue.global().async { }
    出典:NaverBoostコース、https://jinshine.github.io/2018/07/09/iOS/GCD(Grand%20Central%20Dispatch)/を参照