0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Swift】並列処理のためのGCDについて

Posted at

GCDとは

GCDとは、Grand Central Dispatchの略称で、複数のタスクを並列で実行するためのフレームワークです。

GCDは、システムが自動的にタスクをスケジュールし、CPUやメモリの使用を最適化することができます。これにより、プログラマは簡単に並列処理を実装できます。

GCDの種類

まず、GCDを使用するには、タスクを実行するキューを作成する必要があります。GCDには、以下の3つの種類のキューがあります。

Serial Queue:一度に1つのタスクしか実行しないキューです。タスクは順番に実行されます。

Concurrent Queue:複数のタスクを同時に実行できるキューです。タスクの実行順序は保証されません。

Main Queue:UIの更新など、メインスレッドで実行する必要があるタスクを実行するためのキューです。Serial Queueの一種です。

Serial Queueについて

Serial Queueは、Swiftでマルチスレッドの処理を行うための手段の一つであり、キューに追加されたタスクを順番に実行することができます。

以下は、Serial Queueを使用する方法の例です。まず、Serial Queueを作成します。

swift

Copy code

let serialQueue = DispatchQueue(label: “com.example.serial”)

次に、キューに実行するタスクを追加します。

serialQueue.async {

    print("Task 1")

}

serialQueue.async {

    print("Task 2")

}

これにより、”Task 1″と”Task 2″が順番に実行されます。Serial Queueは、追加されたタスクを順序通りに処理するため、前のタスクが完了するまで次のタスクは実行されません。

Serial Queueは、複数のスレッドを使用して並列処理を実行するConcurrent Queueとは異なり、1つのスレッドでタスクを実行するため、デッドロックを回避することができます。

Concurrent Queue

Concurrent Queueは、Swiftでマルチスレッドの処理を行うための手段の一つであり、複数のタスクを並行して実行することができます。

以下は、Concurrent Queueを使用する方法の例です。まず、Concurrent Queueを作成します。

let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)

次に、キューに実行するタスクを追加します。

concurrentQueue.async {

    print("Task 1")

}

concurrentQueue.async {

    print("Task 2")

}

これにより、”Task 1″と”Task 2″が並行して実行されます。Concurrent Queueは自動的にタスクの順序を管理し、複数のスレッドを使用して並列処理を実行します。

Concurrent Queueは、デフォルトでグローバルキューとして提供されているものもあります。これらは、以下のように作成することができます。

let globalQueue = DispatchQueue.global(qos: .background)

グローバルキューにタスクを追加する場合は、以下のようにします。

globalQueue.async {

    print("Background task")

}

これにより、グローバルキュー上で”Background task”が実行されます。

Main Queue

Main Queueは、SwiftでUIスレッド上で処理を実行するための手段の一つであり、アプリケーションのUIを更新するために使用されます。

Main Queueは、アプリケーションのメインスレッドで実行されるSerial Queueの一種であり、UI更新などの処理を実行するために使用されます。

以下は、Main Queueを使用する方法の例です。まず、Main Queueにアクセスするために、以下のように書きます。

let mainQueue = DispatchQueue.main

次に、Main Queue上で実行するタスクを追加します。

mainQueue.async {

    // UIの更新などの処理

}

このように、Main Queueを使用することで、アプリケーションのUIの更新などの処理をメインスレッド上で実行することができます。ただし、Main Queue上で重い処理を行うと、UIのレスポンスが遅くなるため、注意が必要です。

最後に

iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも🦾
色々やってます。もし良かったら見てってください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?