GCD--Serial(串行)和Concurrent(并发)、Synchronous(同步)和Asynchronous(异步)

来源:互联网 发布:c语言移位运算 编辑:程序博客网 时间:2024/06/06 11:50

重点:队列的概念,不同队列各自的用途,优先级

相关概念

  • CGD:Grand Central Dispatch,一个线程调度中心,将线程串联或者并发的传给CPU,让其执行。解决了之前多线程CPU被闲置等的问题。
  • 线程:CPU可调度的一个任务。

特点

GCD有串行和并发两种队列

  • 串行就是先后执行;
  • 并发就是同时完成两个或多个事件;

GCD队列的三种类型:

  • 系统创建–主队列:调用主线程,更新UI;全局队列:有优先级(平时用0就可以),除了自己的任务也会包含系统级别任务;
  • 手动创建–自定义队列:

使用(代码示例):

这里写图片描述
用自己创建的队列来做
这里写图片描述
ps:学习苹果标准注释,并且要看懂那些注释。

GCD的一些方法:

  • 延迟,主要放在主队列中运行:
    这里写图片描述
  • 重复(并发次数多了自然会增加系统开销,多循环可用for):主要用于耗时、重复少的并发队列中时提升性能,改善用户体验。同步,会阻塞主线程
    这里写图片描述
    这样就不会阻塞主线程了
    这里写图片描述
    异步加载两张图片:
    这里写图片描述
  • 调度组(加载两张图片):

(notify异步)
用了三个方法实现两个图片加载,并在完成时出现加载完毕提示:
这里写图片描述
(wait同步):并发操作数据库时候,只有数据操作完成之后才能继续防止出错
这里写图片描述

  • 队列的暂停和恢复ps: 如果已经把任务加载到队列中不能暂停。

    这样修改——延迟两秒,将调度组写到延迟的闭包里
    这里写图片描述

参考文献:
http://lyjh.net/2015/09/27/iOS%E5%A4%9A%E7%BA%BF%E7%A8%8BGCD%E8%AF%A6%E8%A7%A3/。
https://github.com/nixzhu/dev-blog/blob/master/2014-04-19-grand-central-dispatch-in-depth-part-1.md
以及其他网上资源
深表感谢!

0 0
原创粉丝点击