SWIFTの同期、非同期、GCD

4834 ワード

同期(同期)

  • の応答が完了するまで、
  • は実行できません.
  • デフォルトでは、プログラミングは同期
  • です.
  • 要求と結果が同時に現れる
  • 同時に
  • ノード間のタスク処理部
  • をカスタマイズする.
    要求
  • の場合、結果
  • は、時間の長さにかかわらず取得する必要がある.
  • Aの操作が完了するまで、Bの操作
  • を実行することはできない.
    func distance(p1 : Int, p2 : Int) -> Int {
     return abs(p2 - p2)
    }
    
    func area(x1 : Int, y1 : Int, x2 : Int, y2 : Int) -> Int {
     let dX = distance(x1, x2) // 이 줄에서 실행하고, distance 를 돌아 오는동안 area은 멈춰있는다.
     let dY = distance(y1, y2)
     return dX * dY
    }

    非同期

  • の応答状態にかかわらず、
  • は次のことができます.
  • ノード間のタスク処理ユニットは、
  • を同時にペアリングする必要はない.
  • 要求は結果
  • を生成しない.
  • 操作結果無順序
  • B操作(A操作出力結果)は、
  • A操作とともに実行することができる.
    簡単に言えば、動機と非動機です.
    喫茶店で飲み物を注文しましょう.
    動機は前の人が注文して、飲み物が届くまで注文できません.
    一人の従業員が注文を受け、客に振動ベルを配布し、もう一人の従業員が飲み物を作り続け、非同期を提供した.

    SWIFTで非同期を実行するにはどうすればいいですか?


    ✅ GCD (Grand Central Dispatch)

  • GCDは、DispatchQueueというキューを管理します.
  • DispatchQueueにはConcurrent QueuesSerial Queuesが存在する.
  • Concurrentキュー-同期
  • は、分散処理
  • のために複数のスレッドに送信.
  • はそれぞれ独立しているが、複数の類似タスクを処理する際に(類似の重要度/タスク特性を有する)
  • を用いる.
  • は、複数のキュー
  • を同時に取得することができる.
  • マルチスレッド方式でシングルコア
  • を実行
  • 操作結果無順序
  • は主にAPI通信に用いられる.
  • DispatchQueue.global().async {
    	// 구현부
    }
  • シリアルキュー-シリアル
  • 一度に1つのキューしか取得できない
  • シーケンスは、重要なタスク
  • を処理するために使用される.
  • プライマリ・スレッドに順次送信されますが、完了を待たずに他の操作を直接行います.
  • は主にUI関連の作業に用いられる.
  • DispatchQueue.main.async {
    	// 구현부
    }

    ✅ Operation Queue

  • は、開始したタスクの完了を待つことなく、
  • を可能な限り多く実行します.
  • Operationは、バックグラウンドスレッドで実行するタスクのオブジェクト
  • をカプセル化する.
  • OperationQueueタスクの実行順序を決定するとき、またはその他の要因を考慮する
  • は、非同期運転が必要なタスク
  • をオブジェクト指向で使用するのに適している.
  • KVO(重要価値観サービス)は、作業の進捗を監視するための理想的な選択です.
    GCOOpen Queueは、単純な複雑な作業方法を主とするタスクデータと機能、およびカプセル画像の状態が不明、並べ替え/一時停止のキャンセルなどの状態を追跡しやすいFIFOの他の要因である.
    コメントドキュメント
    1. https://medium.com/@goehd2538/ios%EC%9D%98-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%8B%9D-65aa81aad0f9