【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况
异步任务+并行队列
把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行。
/*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { //全局并行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //异步执行 dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task1:%d",i); } NSLog(@"task1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task2:%d",i); } NSLog(@"task2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task3:%d",i); } NSLog(@"task3----%@",[NSThread currentThread]); }); }
运行结果如下。异步任务+并行队列组合情况下,每个任务会在不同的线程中同时执行。
异步任务+串行队列(主队列)
对于异步任务放在串行队列中执行时,任务只会在一个新开的线程中,按照顺序进行执行。
/*异步串行队列*/ - (IBAction)clickBasic3:(id)sender { //创建串行队列 dispatch_queue_t queue = dispatch_queue_create("com.hcios", NULL); //异步执行 dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task1:%d",i); } NSLog(@"task1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task2:%d",i); } NSLog(@"task2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ for (int i = 0; i<2; i++) { NSLog(@"task3:%d",i); } NSLog(@"task3----%@",[NSThread currentThread]); }); }
运行结果如下。可以看到,所有任务都在一个线程中执行,并且完成一个后,再执行下一个。