本文共 2324 字,大约阅读时间需要 7 分钟。
"串行队列:我同时只能调度一个任务诶...虽然我也能开启子线程,但我就能调度一个任务.....""同步任务:没关系啊,我本来就是一个一个被调度执行的呢""串行对列:这样喔...那我们就不用开线程了呢,按顺序执行就好了~"#pragma mark - 串行队列 + 同步任务// 不开线程(同步任务只在当前线程执行)// 顺序执行(串行队列是按顺序调度任务执行的,而且任务又是同步任务)- (void)GCDDemo{ // 1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("LONG", DISPATCH_QUEUE_SERIAL); // 循环的把多个同步任务添加到串行队列 for (NSInteger i = 0; i < 10; i++) { // 2.把同步任务添加到串行队列 dispatch_sync(queue, ^{ NSLog(@"%zd %@",i,[NSThread currentThread]); }); } NSLog(@"不开线程,任务依次在当前线程执行"); }
"串行队列:我同时只能调度一个任务诶...虽然我也能开启子线程,但我就能调度一个任务.....""异步任务:不行,我就要开线程,妈妈说我是可以被多个同时调度的,我要在子线程执行!!!""串行对列:好吧,那我就给你开一个子线程吧,开多了也没用呢,因为我只能同时调度一个任务哦""异步任务:好吧好吧,那你就开一个子线程吧"#pragma mark - 串行队列 + 异步任务// 开线程,只开一个子线程,一个就够了// 顺序执行,(串行队列是按顺序调度任务执行的)- (void)GCDDemo{ // 1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("LONG", DISPATCH_QUEUE_SERIAL); for (NSInteger i = 0; i < 10; i++) { // 2.把异步任务添加到串行队列 dispatch_async(queue, ^{ NSLog(@"%zd %@",i,[NSThread currentThread]); }); } NSLog(@"在一个新的子线程执行,并且有序执行");}
在GCD的队列和任务中
当队列是并行队列时: - 任务是同步的,那么任务一定是同步执行的,并且不开线程(按顺序执行,FIFO) - 任务是异步的时候,任务才会异步执行,开启多个线程
"并行队列:我可以同时调度多个任务,所以能开多个线程哦!""同步任务:不,我就要一个一个调度执行""并行队列:哦,好吧,那我不开线程了,浪费...就用一个主线程吧"#pragma mark - 并行队列 + 同步任务// 不开线程(任务是同步的)// 有序(任务是同步的,队列遵守FIFO)- (void)GCDDemo{ // 1.创建并行队列 dispatch_queue_t queue = dispatch_queue_create("LONG", DISPATCH_QUEUE_CONCURRENT); for (NSInteger i = 0; i < 10; i++) { // 2.把同步任务添加到并行队列 dispatch_sync(queue, ^{ NSLog(@"%zd %@",i,[NSThread currentThread]); }); } NSLog(@"不开线程,任务依次执行");}
"并行队列:我可以同时调度多个任务,所以能开多个线程哦!""异步任务:好啊好啊,我正好着急,想多个任务一起执行呢""并行队列:来吧,我要开启多个线程了,但是不能保证顺序哦..而且主线程不算我的子线程范围呢""异步任务:没关系,我不在乎顺序,能完成就好"#pragma mark - 并行队列 + 异步任务// 开线程// 任务无序- (void)GCDDemo{ // 1.创建并行队列 dispatch_queue_t queue = dispatch_queue_create("LONG", DISPATCH_QUEUE_CONCURRENT); for (NSInteger i = 0; i < 10; i++) { // 2.把异步任务添加到并行队列 dispatch_async(queue, ^{ NSLog(@"%zd %@",i,[NSThread currentThread]); }); } NSLog(@"开启新线程,任务是无序的");}
转载地址:http://yfkii.baihongyu.com/