一、 同步&异步:
指的是能否开启新的线程。同步不能开启新的线程,异步可以。
二、串行&并行:
指的是任务的执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。并行指的是多个任务可以同时执行。异步是多个任务并行的前提条件。
dispatch_queue_t serialqueue=dispatch_queue_create("serialqueue", DISPATCH_QUEUE_SERIAL);//串行线程队列
dispatch_queue_t concurrentqueue=dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);//并行线程队列
// 1.并行线程队列
dispatch_apply(5, concurrentqueue, ^(size_t index) {
NSLog(@"并行线程队列:%ld",index);//无序输出,多线程并行
});
// 2.串行线程队列
dispatch_apply(5, serialqueue, ^(size_t index) {
NSLog(@"串行线程队列:%ld",index);//有序输出,单线程串行
});
// 1循环打印完之后,2才会循环打印
NSLog(@"🔥🔥🔥🔥🔥🔥");//最后执行
for循环
self.dataArray = [NSMutableArray array];
for (int i = 0; i<10; i++) {
///并发队列 异步任务 具备开启多个线程能力
// dispatch_queue_t queue = dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT);//并行队列,多个任务同时执行
dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL);//串行队列,上一个任务完成,才能执行下一个任务
///写入任务
dispatch_async(queue, ^{
NSLog(@"串行队列111111");
// [self write:@(i)];
});
///读取任务
dispatch_async(queue, ^{
NSLog(@"串行队列222222");
// [self read];
});
}
/**
1.串行&&同步:按顺序输出
2.并行&&同步:按顺序输出
3.串行&&异步:输出混乱//写入任务循环10次之后,读取任务才开始循环,并循环10次,
4.并行&&异步:输出混乱
*/
///读取操作
- (void)read {
NSLog(@"数组输出:%@",self.dataArray);
}
///写入操作
- (void)write:(id)obj {
[self.dataArray addObject:obj];
}
网友评论