iOS Grand Central Dispatch(GCD)
3104 ワード
引用:
GCDのフルネームはGrand Central Dispatchで、iOS 4でアップルです.0発行の一連の処理同時演算に関するAPI.プロセッサのマルチコア演算能力を向上するためのものである.GCDはNSOperationQueueに似ていますが、プログラムはタスクを複数の単一タスクに分割してワークキューに送信して同時またはシリアルで実行することができますが、GCDはNSOpertionQueueよりも下位レベルで効率的です.
GCDの動作原理:
GCDの動作原理は、プログラムを平行にキューに入れる特定のタスクであり、使用可能な処理リソースに基づいて、使用可能なプロセッサコア上でタスクを実行するように手配することです.1つのタスクは、関数(function)またはblockであってもよい.GCDの下位層は依然としてスレッドで実現されているが,これによりプログラマが実現の詳細に注目しなくてもよい.GCDのFIFOキューはdispatch queueと呼ばれ、先進的なタスクが先に実行されることを保証することができる.
参考資料:
1:BlocksとDispatch Queueの使用
http://liwpk.blog.163.com/blog/static/363261702012413103111749/
2:GCD使用
http://blog.devtang.com/blog/2012/02/22/use-gcd/
3:GCD(Grand Central Dispatch)チュートリアル
http://www.dreamingwish.com/dream-2012/gcdgrand-central-dispatch%E6%95%99%E7%A8%8B.html
4:iOSでのGCDマルチスレッドモデル
http://www.cnblogs.com/astin/archive/2012/08/02/2619752.html
5:iOSマルチスレッドプログラミングのGrand Central Dispatch(GCD)の紹介と使用
http://blog.csdn.net/totogo2010/article/details/8016129
次の操作を行います.
GCDを使用するメリットと注意事項:
1.GCDを使用することでプロセッサのマルチコア演算能力を効率的に利用できる
2.煩雑で時間の長い計算タスクは、GCDが他のスレッドに割り当てることによってタスクを完了することができる.
3.特別な需要がない場合、スレッドを導入してプログラムの複雑さを増やすべきではない
4.スレッドのブロックに注意する.
Dispatch Queueの理解:
Dispatch Queueは次の3つに分けられます.
Serial Queue(シリアルキュー):Serial Queueはそれぞれ同期して実行されます(一般的には使用されません).
Concurrent Queue(パラレルキュー):global dispatch queueとも呼ばれ、複数のタスクを同時に実行できますが、実行が完了する順序はランダムです.
Main queue(プライマリ・キュー列):アプリケーション・プライマリ・スレッド上でタスクを実行するグローバルで使用可能なserial queueです.UIレベルの更新は、主スレッドによって実行する必要があります.そうしないと、予測できない問題がたくさん発生します.
GCDのAPIの紹介と使用シーン:
dispatch_barrier_async
barrierによって割り当てるタスクは、同じキューの前にタスクの実行が完了した後、barrierによって割り当てられたタスクを実行し、barrierによって割り当てられたタスクも実行が完了すると、次のタスクを実行し続けることを保証することができる.
サンプルコードは次のとおりです.
実行結果:
2013-05-29 14:30:47.677 GCDDemo[4630:1b03] task 2
2013-05-29 14:30:47.677 GCDDemo[4630:1303] task 1
2013-05-29 14:30:47.679 GCPDDemo[4630:1303]等task 1、task 2の実行が完了してから実行する
2013-05-29 14:30:48.82 GcDDemo[4630:1303]割り当てられた時にbarrier taskの後ろにいたのでbarrierタスクの実行が完了するまで待っています
注意:タスクは、同じキューで実行されることを保証する必要があります.複数のキューが同時に存在する場合、効果はありません.
マルチキューでの秩序化実行は、semaphoreで待機し、許可する方法で秩序化スケジューリングタスクを手配する必要がある.次はsemaphoreに入ります!
GCDのメモリ管理:
GCDのメモリ管理はdispatch_経由retainとdispatch_releaseは変数の保持と解放を制御する.
しかしiOS 6以降のGCDメモリ管理はARCに完全に任せることができる.
もしあなたのプロジェクトにiOS 5が必要なら.0であれば、やはり手動で管理する必要がある.
詳細については、以下のstackoverflowを参照してください.
http://stackoverflow.com/questions/8618632/does-arc-support-dispatch-queues
GCDのフルネームはGrand Central Dispatchで、iOS 4でアップルです.0発行の一連の処理同時演算に関するAPI.プロセッサのマルチコア演算能力を向上するためのものである.GCDはNSOperationQueueに似ていますが、プログラムはタスクを複数の単一タスクに分割してワークキューに送信して同時またはシリアルで実行することができますが、GCDはNSOpertionQueueよりも下位レベルで効率的です.
GCDの動作原理:
GCDの動作原理は、プログラムを平行にキューに入れる特定のタスクであり、使用可能な処理リソースに基づいて、使用可能なプロセッサコア上でタスクを実行するように手配することです.1つのタスクは、関数(function)またはblockであってもよい.GCDの下位層は依然としてスレッドで実現されているが,これによりプログラマが実現の詳細に注目しなくてもよい.GCDのFIFOキューはdispatch queueと呼ばれ、先進的なタスクが先に実行されることを保証することができる.
参考資料:
1:BlocksとDispatch Queueの使用
http://liwpk.blog.163.com/blog/static/363261702012413103111749/
2:GCD使用
http://blog.devtang.com/blog/2012/02/22/use-gcd/
3:GCD(Grand Central Dispatch)チュートリアル
http://www.dreamingwish.com/dream-2012/gcdgrand-central-dispatch%E6%95%99%E7%A8%8B.html
4:iOSでのGCDマルチスレッドモデル
http://www.cnblogs.com/astin/archive/2012/08/02/2619752.html
5:iOSマルチスレッドプログラミングのGrand Central Dispatch(GCD)の紹介と使用
http://blog.csdn.net/totogo2010/article/details/8016129
次の操作を行います.
GCDを使用するメリットと注意事項:
1.GCDを使用することでプロセッサのマルチコア演算能力を効率的に利用できる
2.煩雑で時間の長い計算タスクは、GCDが他のスレッドに割り当てることによってタスクを完了することができる.
3.特別な需要がない場合、スレッドを導入してプログラムの複雑さを増やすべきではない
4.スレッドのブロックに注意する.
Dispatch Queueの理解:
Dispatch Queueは次の3つに分けられます.
Serial Queue(シリアルキュー):Serial Queueはそれぞれ同期して実行されます(一般的には使用されません).
Concurrent Queue(パラレルキュー):global dispatch queueとも呼ばれ、複数のタスクを同時に実行できますが、実行が完了する順序はランダムです.
Main queue(プライマリ・キュー列):アプリケーション・プライマリ・スレッド上でタスクを実行するグローバルで使用可能なserial queueです.UIレベルの更新は、主スレッドによって実行する必要があります.そうしないと、予測できない問題がたくさん発生します.
GCDのAPIの紹介と使用シーン:
dispatch_barrier_async
barrierによって割り当てるタスクは、同じキューの前にタスクの実行が完了した後、barrierによって割り当てられたタスクを実行し、barrierによって割り当てられたタスクも実行が完了すると、次のタスクを実行し続けることを保証することができる.
サンプルコードは次のとおりです.
dispatch_queue_t queue = dispatch_queue_create("wwww", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:0.2];
NSLog(@"task 1");
});
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:0.2];
NSLog(@"task 2");
});
dispatch_barrier_async(queue, ^{
NSLog(@" task1 ,task2 ");
[NSThread sleepForTimeInterval:0.2];
});
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:0.2];
NSLog(@" barrier task , barrier ");
});
dispatch_release(queue);
実行結果:
2013-05-29 14:30:47.677 GCDDemo[4630:1b03] task 2
2013-05-29 14:30:47.677 GCDDemo[4630:1303] task 1
2013-05-29 14:30:47.679 GCPDDemo[4630:1303]等task 1、task 2の実行が完了してから実行する
2013-05-29 14:30:48.82 GcDDemo[4630:1303]割り当てられた時にbarrier taskの後ろにいたのでbarrierタスクの実行が完了するまで待っています
注意:タスクは、同じキューで実行されることを保証する必要があります.複数のキューが同時に存在する場合、効果はありません.
マルチキューでの秩序化実行は、semaphoreで待機し、許可する方法で秩序化スケジューリングタスクを手配する必要がある.次はsemaphoreに入ります!
GCDのメモリ管理:
GCDのメモリ管理はdispatch_経由retainとdispatch_releaseは変数の保持と解放を制御する.
しかしiOS 6以降のGCDメモリ管理はARCに完全に任せることができる.
もしあなたのプロジェクトにiOS 5が必要なら.0であれば、やはり手動で管理する必要がある.
詳細については、以下のstackoverflowを参照してください.
http://stackoverflow.com/questions/8618632/does-arc-support-dispatch-queues