03 GCD-并發(fā)隊列
并發(fā)隊列线召,異步執(zhí)行
MARK:并發(fā)隊列,異步執(zhí)行
-(void)gcdDemo3{
//1.隊列-并發(fā) DISPATCH_QUEUE_CONCURRENT 并發(fā)
dispatch_queue_t q = dispatch_queue_create("cc_queue",DISPATCH_QUEUE_CONCURRENT);
//2.異步執(zhí)行任務
for(int i = 0;i < 10;i++)
{
dispatch_async(q,^{
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
NSLog(@"come here");
}
問題:
1.會開幾條線程多矮?
會開多條線程缓淹,線程數(shù)量是由GCD來決定
2.會順序執(zhí)行嗎?
不會
3.come here的位置塔逃?
不確定讯壶,一般會靠上的位置
看起來任務執(zhí)行的是順序的。是因為線程的耗時差不多湾盗。最重要原因是伏蚊,線程取任務是順序取的。
并發(fā)隊列格粪,同步執(zhí)行
MARK:并發(fā)隊列躏吊,同步執(zhí)行
-(void)gcdDemo4{
//1.隊列-并發(fā) DISPATCH_QUEUE_CONCURRENT 并發(fā)
dispatch_queue_t q = dispatch_queue_create("cc_queue",DISPATCH_QUEUE_CONCURRENT);
//2.同步執(zhí)行任務
for(int i = 0;i < 10;i++)
{
dispatch_sync(q,^{
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
NSLog(@"come here");
}
問題:
1.會開幾條線程?
不會
2.會順序執(zhí)行嗎帐萎?
順序
3.come here的位置比伏?
最后
對比串行隊列同步任務 和 并發(fā)隊列同步任務
- 2者之間的結果是一樣的。只要同步執(zhí)行疆导,不管是串行還是并行都是 一樣的赁项。
同步執(zhí)行:不會到線程池里面去獲取子線程
異步執(zhí)行:只要有任務,就會到線程池取子線程(主隊列除外)
mainQueue是順序執(zhí)行
小結
- 開不開線程是鬼,取決去任務的函數(shù)肤舞,同步不開,異步才能開均蜜;
- 開幾條線程李剖,取決于隊列,串行開一條囤耳,并發(fā)可以開多條(異步執(zhí)行)