#pragma markf - 用异步函数往并发队列中添加任务 // 创建并行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 添加任务到队列中,就可以执行任务 // 异步函数:具备开启新线程的能力 // 括号内前边写的是并发队列 block是任务 dispatch_async(queue, ^{ NSLog(@"大娃----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"二娃----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"三娃----%@",[NSThread currentThread]); }); NSLog(@"%@",[NSThread mainThread]); // 打印主线程 // 总结:可以同时开启三个子线程并发加载
#pragma markf - 用异步函数往串行队列中添加任务 // 打印主线程 NSLog(@"主线程:%@",[NSThread mainThread]); // 创建串行队列 第一个参数为串行队列的名称,是C语言的字符串 // 第二个参数为队列的属性,一般来说串行队列不需要赋值任何属性,所以通常传空值(NULL) dispatch_queue_t queue = dispatch_queue_create("sYx", NULL); // 添加异步任务到队列中执行 dispatch_async(queue, ^{ NSLog(@"大娃----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"二娃----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"三娃----%@",[NSThread currentThread]); }); // 总结 会开启新线程,但是只开启一个线程,因为用的串行队列
#pragma markf - 用同步函数往并发队列中添加任务// // 打印主线程 NSLog(@"主线程:%@",[NSThread mainThread]); // 创建并行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 添加同步任务到队列中执行 dispatch_sync(queue, ^{ NSLog(@"大娃----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"二娃----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"三娃----%@",[NSThread currentThread]); }); // 总结:不会开启新线程,并发队列失去了并发的功能
#pragma markf - 用同步函数往串行队列中添加任务 // 打印主线程 NSLog(@"主线程:%@",[NSThread mainThread]); // 创建串行并列 dispatch_queue_t queue = dispatch_queue_create("sYx", NULL); // 添加同步函数到队列中执行 dispatch_sync(queue, ^{ NSLog(@"大娃----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"二娃----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"三娃----%@",[NSThread currentThread]); }); // 不会开启新线程,串行加载数据 // 结论:同步函数不具备开启新子线程的能力,无论是什么队列都不会开启新线程 // 异步函数具备开启新子线程的能力,开启几条子线程由队列决定(串行队列开启一条新的子线程,并行队列会开启多条子线程)