大中央调度#1

自推出以来,Grand Central Dispatch已成为Apple平台上并发编程的最终解决方案。 GCD同时执行代码,提供调度和同步功能,并与语言功能和API无缝集成。

GCD提供并管理应用可以向其提交任务的队列。 这种抽象隐藏了线程管理,并专注于构建任务序列。 GCD是Objective-C的一项现代功能,它提供了一组丰富的方法和API,可用于支持常见的多线程任务。 它提供了一种将任务排队以进行调度的方法:

  • 主线程“只有一个线程是主线程,所有其他线程都是背景”
  • 并发队列(并行运行)
  • 或串行队列(以FIFO顺序运行)

我们可以创建自己的线程,但这可能会导致很多问题。 在将任务分配给GCD工序队列时 ,系统将自行管理线程。

我们可以创建多个任务并将其分配给队列。 每个任务分为多个单元,每个单元由可用线程执行。 系统将任务分解为多个单元并将其分配给线程。

并发问题 (使用GCD或操作队列可以避免前两个问题 ):

  1. 竞争条件 :两个线程试图同时访问一个资源(变量或内存中的数据结构) 。 Xcode中的Thread Sanitizer可以为我们进行管理。 假设您在后台线程中访问变量时更改了主线程中的变量!

2.当高优先级工作依赖于低优先级工作时, 优先级反转将一直停止,直到低优先级完成所需的工作,然后恢复。

3.死锁

Xcode中的调试导航 可区分线程, 时间分析器记录不同线程上的活动,而线程清理程序可帮助捕获线程违规。

信用