异步VS同步、串行VS并行

从堵塞角度:

     异步:为了不堵塞当前任务为出发点----> async

     同步:需要堵塞当前任务  --->sync


从效率角度:

     串行:单个线程中执行 ---> DISPATCH_QUEUE_SERIAL

     并行:多个线程同时执行,提高效率 ---> DISPATCH_QUEUE_CONCURRENT



/**
 *  异步、串行队列
 *  顺序执行
 */
-(void)gcdDemo1{
    dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gcdDemo", DISPATCH_QUEUE_SERIAL);
    for (int i=0; i<10; i++) {
        dispatch_async(q1, ^{
            NSLog(@"gcdDemo1--i=%d %@",i,[NSThread currentThread]);
        });
    }
    NSLog(@"main Queue");
}

/**
 *  异步、并行队列
 *  无序,执行效率高,消耗资源大
 */
-(void)gcdDemo2{
    dispatch_queue_t q2=dispatch_queue_create("com.hellocation.gcdDemo", DISPATCH_QUEUE_CONCURRENT);
    for (int i=0; i<10; i++) {
        dispatch_async(q2, ^{
            NSLog(@"gcdDemo2--i=%d %@",i,[NSThread currentThread]);
        });
    }
    NSLog(@"main Queue");
}


/**
 *  同步、都在主线程中执行
 *  串行、并行 无区别
 */
-(void)gcdDemo3{
    dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gcdDemo", DISPATCH_QUEUE_CONCURRENT);
    for (int i=0; i<10; i++) {
        dispatch_sync(q1, ^{
            NSLog(@"gcdDemo3--i=%d %@",i,[NSThread currentThread]);
        });
    }
    NSLog(@"main Queue");
}

/**
 *  全局队列和并行队列类似
 */
-(void)gcdDemo5{
    dispatch_queue_t q=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    for (int i=0; i<10; i++) {
        dispatch_sync(q, ^{
            sleep(1.0);
            NSLog(@"gcdDemo5--i=%d %@",i,[NSThread currentThread]);
        });
    }
    for (int i=0; i<10; i++) {
        dispatch_async(q, ^{
            sleep(1.0);
            NSLog(@"gcdDemo5--i=%d %@",i,[NSThread currentThread]);
        });
    }
    NSLog(@"main Queue");
}

/**
 *  若对主线程做同步操作,因主线程一直在运行,产生等待锁
 */
-(void)gcdDemo6{
    dispatch_queue_t q=dispatch_get_main_queue();
#if 0
    for (int i=0; i<10; i++) {
        dispatch_sync(q, ^{
            NSLog(@"%@",[NSThread currentThread]);
        });
    }
#else
	for (int i=0; i<10; i++) {
		dispatch_async(q, ^{
            sleep(1.0);
			NSLog(@"gcdDemo6--i=%d %@",i,[NSThread currentThread]);
		});
	}
#endif
    NSLog(@"main Queue");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值