/**
* 同步函数 + 并发队列:不会开启新的线程
*/
- (void)syncConcurrent{
//同步函数,在当前线程执行,所以不开线程。所以无法实现并发
}
/**
* 异步函数 + 并发队列:可以同时开启多条线程
*/
- (void)asyncCouncurrent{
//GCD默认已经提供了全局的并发队列,供整个应用使用,可以无需手动创建
//使用dispatch_get_global_queue函数获得全局的并发队列
// 1.创建一个并发队列
dispatch_queue_t queue = dispatch_queue_create("com.520it.queue", DISPATCH_QUEUE_CONCURRENT);
// dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//2将任务加到队列
dispatch_async(queue, ^{
for (int i = 0; i < 10; i++) {
NSLog(@"1-----%@",[NSThread currentThread]);
}
});
}
/**
* 异步函数+ 串行队列:会开启新的线程,但是任务是串行的,执行完一个任务再执行下一个任务
*/
- (void)asyncSerial{
dispatch_queue_t queue = dispatch_queue_create("com", DISPATCH_QUEUE_SERIAL);//写NULL也是串行队列
dispatch_async(queue, ^{
NSLog(@"1");
});
dispatch_async(queue, ^{
NSLog(@"2");
});
dispatch_async(queue, ^{
NSLog(@"3");
});
}
/**
* 同步函数 + 串行队列:不会开启新的线程。在当前线程执行任务,任务是串行的,执行完一个任务,再执行下一个任务
*/
- (void)syncSerial{
// 1。创建串行队列
dispatch_queue_t queue = dispatch_queue_create("com", DISPATCH_QUEUE_SERIAL);
// 2。将任务添加队列
dispatch_sync(queue, ^{
NSLog(@"1");
});
dispatch_sync(queue, ^{
NSLog(@"2");
});
dispatch_sync(queue, ^{
NSLog(@"3");
});
}
//主队列,特殊的串行队列
//GCD中获得串行有两种途径
//创建串行队列(队列类型传递NULL 或者 DISPATCH_QUEUE_SERIAL)
//dispatch_queue_t queue = dispatch_queue_create("com", NULL);
//主队列是GCD自带的一种特殊的串行队列
//放在主队列中的任务,都会放到主线程中执行
/**
* 异步函数 + 主队列:只在主线程中执行任务
*/
- (void)asyncMain{
// 1.获得主队列
dispatch_queue_t queue = dispatch_get_main_queue();
// 都在主线程。无论同步函数还是异步函数,都在主线程里。
// 在主队列中,异步函数不会开启新线程
// dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
}
/**
* 同步函数 + 主队列:不可行(看情况)
*/
- (void)syncMain{
NSLog(@"sq");
// 1。创建主队列
dispatch_queue_t queue = dispatch_get_main_queue();
// 2。将任务添加队列
dispatch_sync(queue, ^{
NSLog(@"1");
});
dispatch_sync(queue, ^{
NSLog(@"2");
});
dispatch_sync(queue, ^{
NSLog(@"3");
});
NSLog(@"end");//没走
}