1.gcd簡介
- GCD是蘋果公司爲多核的並行運算提出的解決方案
- GCD會自動利用更多的CPU內核(比如雙
- 全稱是Grand Central Dispatch
- 純C語言的,提供了非常多強大的函數
- 核、四核)
- GCD會自動管理線程的生命週期(創建線程、調度任務、銷燬線程)
- 程序員只需要告訴GCD想要執行什麼任務,不需要編寫任何線程管理代碼
2.gcd 核心:將任務添加到隊列
任務:執行什麼操作(方法或者函數)
隊列:存放任務的數據結構
使用步驟:
1.創建任務
2.將任務添加到隊列中
3.隊列的類型:
串行隊列:特點 任務一個一個按照順序執行(完成一個任務才能從隊列中去下一個任務)
併發隊列:特點 可以同時調度多個任務併發執行 併發功能只有在異步函數的情況下才有效果
- 同步的方式執行任務:在當前線程中依次執行任務
dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
queue:隊列
block:任務
- 異步的方式執行任務:新開線程,在新線程中執行任務
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
- 如果將異步任務添加到併發隊列中,同時底層線程池有可用的線程資源,CPU就會調度新線程執行異步任務
//併發隊列 同步執行
- (void)testGcd1
{
//創建隊列
dispatch_queue_t queue = dispatch_queue_create("test1", DISPATCH_QUEUE_CONCURRENT);
//創建任務
for(int i=0;i<10;i++)
{
dispatch_sync(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}
//併發隊列 異步執行
- (void)testGcd2
{
dispatch_queue_t queue = dispatch_queue_create("test2", DISPATCH_QUEUE_CONCURRENT);
for(int i=0;i<10;i++)
{
dispatch_async(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}
//串行隊列 同步執行
- (void)testGcd3
{
//創建隊列
dispatch_queue_t queue = dispatch_queue_create("test3", DISPATCH_QUEUE_SERIAL);
//創建任務
for(int i=0;i<10;i++)
{
dispatch_sync(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}
//串行隊列 異步執行
- (void)testGcd4
{
dispatch_queue_t queue = dispatch_queue_create("test4", DISPATCH_QUEUE_SERIAL);
for(int i=0;i<10;i++)
{
dispatch_async(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}