关于GCD的一些认识

GCD是使用多线程的一种方式  在处理大量数据方面有着巨大的优势  它会自动管理线程的生命周期  对于使用者来说非常的方便  下面来简单介绍下使用

1.线程的设计 

1.1创建线程 

dispatch_queue_t ch_queue_1 =dispatch_queue_create("ch_queue_1",DISPATCH_QUEUE_CONCURRENT);第一个参数是类似id的字符串  设置的时候只需要保证唯一性即可  后面的参数 DISPATCH_QUEUE_CONCURRENT 代表并行队列  

DISPATCH_QUEUE_SERIAL代表串行队列 

1.2获取程序自带的线程

当然  系统为我们的软件自动分配三个线程  我们通过 dispath_get_global_queue(,)来获取

其中有两个参数  第二个暂时用不到 第一个是线程的优先级

DISPATCH_QUEUE_PRIORITY_BACKGROUND 优先级最低

DISPATCH_QUEUE_PRIORITY_LOW优先级低

DISPATCH_QUEUE_PRIORITY_DEFAULT 默认优先级

DISPATCH_QUEUE_PRIORITY_HIGH优先级高

1.3只执行一次的操作 常用于写单例

dispatch_once_t


1.4延迟执行的操作

dispatch_after(,)有2个参数  第一个是起始时间和延迟时间的长度 第二个是线程 


1.5线程组 是一种同步机制  可以让一些线程先执行 然后一些线程最后执行 控制线程顺序


dispatch_group_t 创建线程组 

最后执行的话应该使用dispatch_group_notify

1.6把某些代码执行n编


dispatch_apply  需要注意的是这执行n编的代码是并行执行的  

可以看到执行顺序完全被打乱的

1.7同一个线程的不同任务实现同步

dispatch_barrier_async

在这之前的线程都会执行完在继续执行后面的代码   

前两次的执行是同步执行的  但是dispatch_barrier_async中的代码总会在前两次完成之后再继续执行


 2.任务执行方式 与 队列

在GCD中  搞清楚 任务 队列是非常重要的  任务是什么呢  简单说就是 GCD中block块中的执行代码 任务执行方式有两种 同步执行 和异步执行  而队列有两种 串行队列和并行队列  有什么区别呢??  下面通过代码来演示吧

2.1 我们先创建两个并行队列  使用异步执行  


简单循环十条数据  下面看看打印结果 

第二次与第一次一样  所以又打印一次 

只是截取前几条数据  可以发现 第一次与第三次 顺序不一样  所以 并行队列就是 并发执行任务  没有先后顺序  那串行对列 就是按照代码先后顺序来执行 如果显示结果一直都会是第一条的结果的 

2.2 我们再创建两个并发队列 使用同步执行


看看 结果

可以看到先执行完第一个线程的操作然后才会执行第二个  在刚才我们测试串行 和并行的时候用的是  异步执行  所以由此可以看出  同步执行会先执行完一个线程 然后再执行 下一个  所以会造成线程堵塞   如果是一个死循环呢?  那么代码就无法继续往下执行了  这个时候称为线程死锁  当然  由于异步执行会同时执行任务  不会出现线程无法执行任务的情况   也就不会有这些问题了  










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值