ios-FMDB多线程的使用技巧

先看一段代码

 dispatch_queue_t queue1=dispatch_queue_create("hh", DISPATCH_QUEUE_SERIAL);
 dispatch_queue_t queue=  dispatch_queue_create("hl", DISPATCH_QUEUE_CONCURRENT);
    for(int i=0;i<10;i++)
    {
    dispatch_async(queue, ^{
        
            dispatch_sync(queue1, ^{
                NSLog(@"hello %d %@",i,[NSThread currentThread]);
                
            });
    });
    }
执行效果如下图所示,也就是说开启了多个线程,任务都是顺序执行完成的,这里相当于就是,异步执行了这些任务,但是我们仍然可以保证这些任务被顺序的执行,这个主要是被用到在数据库操作中,因为如果耗时的操作我们要放到子线程上执行,如果放到主线程上执行,那就会造成界面的卡顿,所以数据库操作要保证同一个时间,只有一个操作。

在FMDB默认情况下都是在主线程上执行的。

还有一点,串行队列不能嵌套使用,就比如如下代码所示

这个就相当于先把从NSLog(@"hello")这句以及往下的语句放到串行队列中,然后下面又遇到dispatch_sync的时候,又添加了个任务到队列中,然后又是同步执行的,也就是说需要把第一个任务执行完,才能继续执行后面的任务,而后面的任务需要等把第一个任务执行完,再去执行,所以就相互等待了。

   dispatch_queue_t queue1=dispatch_queue_create("hh", DISPATCH_QUEUE_SERIAL);
   dispatch_sync(queue1, ^{
        NSLog(@"hello");
        dispatch_sync(queue1, ^{
            NSLog(@"kko");
        });
    });



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值