GCDの基本使用
2263 ワード
1、簡単な書き方
2,知識点同時キュー:(1)複数のタスクを同時に実行し、複数のスレッドを自動的に開くことができる.(2)非同期関数でのみ有効である.シリアル・キュー:タスクを次から次へ実行するプライマリ・キュー:プライマリ・スレッドを表す特殊なシリアル・キュー
同期操作:現在のスレッドでタスクを実行し、新しいスレッドを開く能力を備えていない.非同期操作:新しいスレッドでタスクを実行し、新しいスレッドを開く能力を備えている.
3,シリアルキューの動作(1)シリアルキューの同期動作
(2)シリアルキューの非同期動作
4,パラレルキューの操作(1)パラレルキュー,非同期実行
(2)並列キュー同期動作
まとめ:スレッドを開くことができないのは:同期操作(スレッドを開かない)と非同期操作(スレッドを開く)4で、主キューの操作主キューの列は非同期で実行することができて、任務の順序は実行します;同期して実行できないと、デッドロックになります.
//dispatch_get_global_queue(0, 0) ,
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"task %@",[NSThread currentThread]);
});
// , , , ;
for (int i = 0; i < 20; i++) {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"task %@ %d",[NSThread currentThread],i);
});
}
2,知識点同時キュー:(1)複数のタスクを同時に実行し、複数のスレッドを自動的に開くことができる.(2)非同期関数でのみ有効である.シリアル・キュー:タスクを次から次へ実行するプライマリ・キュー:プライマリ・スレッドを表す特殊なシリアル・キュー
同期操作:現在のスレッドでタスクを実行し、新しいスレッドを開く能力を備えていない.非同期操作:新しいスレッドでタスクを実行し、新しいスレッドを開く能力を備えている.
3,シリアルキューの動作(1)シリアルキューの同期動作
// ,
//
-(void)demo{
//
// 1:
// 2:
dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
for (int i =0; i<20; i++) {
dispatch_sync(serialQueue, ^{
NSLog(@"serialQueue %@ %d",[NSThread currentThread],i);
});
}
}
(2)シリアルキューの非同期動作
//
//
-(void)demo{
//
// 1:
// 2:
dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
for (int i =0; i<20; i++) {
dispatch_async(serialQueue, ^{
NSLog(@"serialQueue %@ %d",[NSThread currentThread],i);
});
}
}
4,パラレルキューの操作(1)パラレルキュー,非同期実行
//
//
//
-(void)demo1{
//
dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 20; i++) {
dispatch_async(concurrentQueue, ^{
NSLog(@"con %@ %d",[NSThread currentThread],i);
});
}
}
(2)並列キュー同期動作
// ,
//
// ,
-(void)demo{
//
dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 20; i++) {
dispatch_sync(concurrentQueue, ^{
NSLog(@"con %@ %d",[NSThread currentThread],i);
});
}
}
まとめ:スレッドを開くことができないのは:同期操作(スレッドを開かない)と非同期操作(スレッドを開く)4で、主キューの操作主キューの列は非同期で実行することができて、任務の順序は実行します;同期して実行できないと、デッドロックになります.