搜索
您的当前位置:首页正文

同步&异步 与 串行&并行的区别

来源:二三娱乐

一、 同步&异步:
指的是能否开启新的线程。同步不能开启新的线程,异步可以。
二、串行&并行:
指的是任务的执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。并行指的是多个任务可以同时执行。异步是多个任务并行的前提条件。

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];
}
Top