阅读背景:

iOS开发之用GCD实现多线程

来源:互联网 
//因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程,它们在子线程中顺序执行。最常用。
dispatch_queue_t q1 = dispatch_queue_create("qqqqq", DISPATCH_QUEUE_SERIAL);
for (int i = 0; i < 10; i++) {
   dispatch_async(q1, ^{
       NSLog(@"11111%@",[NSThread currentThread]);
   });
}
//因为是异步,所以开通了子线程,且因为是并行队列,所以开通了好多个子线程,具体几个,无人知晓,看运气。线程数量无法控制,且浪费。
dispatch_queue_t q2 = dispatch_queue_create("wwwww", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 10; i++) {
   dispatch_async(q2, ^{
       NSLog(@"22222%@",[NSThread currentThread]);
   });
}
//因为是同步,所以无论是并行队列还是串行队列,都是在主线程中执行
dispatch_queue_t q3 = dispatch_queue_create("eeeee", DISPATCH_QUEUE_SERIAL);
for (int i = 0; i < 10; i++) {
   dispatch_sync(q3, ^{
       NSLog(@"33333%@",[NSThread currentThread]);
   });
}
//全局队列和并行队列类似(全局队列不需要创建直接get即可,而导致其没有名字,不利于后续调试)
dispatch_queue_t q4 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (int i = 0; i < 10; i++) {
   dispatch_sync(q4, ^{
       NSLog(@"44444%@",[NSThread currentThread]);
   });
}
for (int i = 0; i < 10; i++) {
   dispatch_async(q4, ^{
       NSLog(@"55555%@",[NSThread currentThread]);
   });
}//因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程,它们在子线程中



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: