Asyncronous
2838 ワード
同期vs非同期
同期(sync)
:プログラムを順番に実行します.前のプログラムが完了するまで、次のプログラムは待たなければなりません.
非同期(aynchronous)
:プログラムを並列に実行し、前のプログラムを完了することなく次のプログラムを実行します.
IOSがサポートする同期プログラミング
同時プログラミングとは?複数のスレッドが交互に実行され、同時に実行されているように見えます.
Grand Central Dispatch、Open Queue/threadなど
:他のスレッドで時間がかかるタスクを非同期で実行
1. GCD
:これはアップル社がマルチコアとマルチプロセッサ環境で最適化プログラミングを行うために設計したものです.プログラマが実行するタスクをDispatch Queueに追加すると、GCDはタスクに適したスレッドを自動的に生成して実行し、スレッドを削除します.
Dispatch Queue:先入先出順で実行されるキュー
-ディスパッチキューのタイプ
:開始したタスクの完了を待たずに、できるだけ多くのタスクを実行します.
:一度に1つのタスクのみを実行し、キューから新しいタスクを除外して起動するのを待つ
-GCDの使い方
1)Main Queue:メインスレッドで動作するキュー(UI,ユーザインタラクション関連処理)
DispatchQueue.main.async {
//statements
}
2)グローバルキュー:優先順位を指定するキュー
DispatchQueue.global(qos : .background).async {
//statement
}
3)CustomQueue:キューを作成して管理する場合
let concurrentQueue = DispatchQueue(label:“concurrent”, qos : .background, attributes: .concurrent)
let serialQueue = DispatchQueue(label : “serial”, qos: .background)
DispatchQueue.gloabal(qos:.background).async {
//statement
DispatchQueue.main.async {
//statement
}
}
->GCDでは、通常バックグラウンドキューからホームキューに移動します.2. Operation Queue
:GCDベースのマルチファンクションキュー.Concurrent Dispatch Queueと同様にOpen Queueクラスで実現される.
OperationQueue.addOperation() {
//statement <- 백그라운드에서 실행됨( 이때, UI와 관련된 코드는 메인스레드에서 작동해 야하기 때문에 작성할 수 없음)
}
UIに関するコードを作成する必要があります。
OperationQueue.addOperation() {
//statement
OperationQueue.main.addOperation {
// UI statement
}
}
GCDとOpenQueueの違い
n/a.結論
Reference
この問題について(Asyncronous), 我々は、より多くの情報をここで見つけました https://velog.io/@sun02/Asyncronousテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol