GCDの基本使用

2263 ワード

1、簡単な書き方
//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で、主キューの操作主キューの列は非同期で実行することができて、任務の順序は実行します;同期して実行できないと、デッドロックになります.