Asyncronous

2838 ワード

同期vs非同期



同期(sync)


:プログラムを順番に実行します.前のプログラムが完了するまで、次のプログラムは待たなければなりません.

非同期(aynchronous)


:プログラムを並列に実行し、前のプログラムを完了することなく次のプログラムを実行します.

IOSがサポートする同期プログラミング


同時プログラミングとは?複数のスレッドが交互に実行され、同時に実行されているように見えます.
Grand Central Dispatch、Open Queue/threadなど
:他のスレッドで時間がかかるタスクを非同期で実行

1. GCD


:これはアップル社がマルチコアとマルチプロセッサ環境で最適化プログラミングを行うために設計したものです.プログラマが実行するタスクをDispatch Queueに追加すると、GCDはタスクに適したスレッドを自動的に生成して実行し、スレッドを削除します.

Dispatch Queue:先入先出順で実行されるキュー


-ディスパッチキューのタイプ

  • Concurrency Distpach Queue
    :開始したタスクの完了を待たずに、できるだけ多くのタスクを実行します.
  • Serial Dispatch Queue
    :一度に1つのタスクのみを実行し、キューから新しいタスクを除外して起動するのを待つ
  • -GCDの使い方


    1)Main Queue:メインスレッドで動作するキュー(UI,ユーザインタラクション関連処理)

    DispatchQueue.main.async {
      //statements
    }

    2)グローバルキュー:優先順位を指定するキュー

  • ユーザインタラクション:直ちに実行しなければならないタスク
  • ユーザ発起:ほぼユーザが結果を待つタスク
  • default
  • utility
  • 背景:ユーザがすぐに認識するタスクは不要
  • DispatchQueue.global(qos : .background).async {
      //statement
    }

    3)CustomQueue:キューを作成して管理する場合

    let concurrentQueue = DispatchQueue(label:“concurrent”, qos : .background, attributes: .concurrent) 
    let serialQueue = DispatchQueue(label : “serial”, qos: .background)
  • 2つのQを同時に使いたい場合
  • DispatchQueue.gloabal(qos:.background).async {
         //statement
     DispatchQueue.main.async {
         //statement
        }
    }
    ->GCDでは、通常バックグラウンドキューからホームキューに移動します.

    2. Operation Queue


    :GCDベースのマルチファンクションキュー.Concurrent Dispatch Queueと同様にOpen Queueクラスで実現される.
  • ディスパッチキューは常にFIFOでタスクを実行するが、演算キューは実行順序を決定する際に他の要因も考慮する.
  • OperationQueue.addOperation() {
      //statement <- 백그라운드에서 실행됨( 이때, UI와 관련된 코드는 메인스레드에서 작동해 야하기 때문에 작성할 수 없음)
    }

    UIに関するコードを作成する必要があります。

    OperationQueue.addOperation() {
    //statement
       OperationQueue.main.addOperation {
        // UI statement
       }
    }

    GCDとOpenQueueの違い

  • OperationQueueは、同時に実行できる最大数の演算を指定できます.
  • 操作キューに鍵の価値観を利用できる製品が多数ある
  • 操作キューは一時停止・再起動・キャンセル可能
  • (Kvo:他のオブジェクトのpropertyが変化した場合、そのオブジェクトが直接通知を受信できるようにするメカニズム.アプリケーションの凝集力が重要です.)例えば、MVC設計モードでは、モデルの状態をコントローラやビューの状態と統一するために使用される.)

    n/a.結論

  • GCD:作業が複雑でない簡単な作業非同期処理に適用
  • 演算キュー:オブジェクト指向の方法で、キャンセル、並べ替え、等の方法で非同期で実行する必要がある複雑な作業/進行中の作業を実行するのに適しています.また,KVOを用いて作業進捗を監視する必要がある場合にも好適である.