并发编程研读

           并发所描述的概念就是同时运行多个任务。这些任务可能是以在单核 CPU 上分时(时间共享)的形式同时运行,也可能是在多核 CPU 上以真正的并行方式来运行。OS X 和 iOS 提供了几种不同的 API 来支持并发编程。每一个 API 都具有不同的功能和使用限制,这使它们适合不同的任务。同时,这些 API 处在不同的抽象层级上。我们有可能用其进行非常深入底层的操作,但是这也意味着背负起将任务进行良好处理的巨大责任。

           实际上,并发编程是一个很有挑战的主题,它有许多错综复杂的问题和陷阱。当开发者在使用类似 Grand Central Dispatch(GCD)或 NSOperationQueue  的 API 时,很容易遗忘这些问题和陷阱。本文首先对 OS X 和 iOS 中不同的并发编程 API 进行一些介绍,然后再深入了解并发编程中独立于与你所使用的特定 API 的一些内在挑战。

    OS X 和 iOS 中的并发编程

             苹果的移动和桌面操作系统中提供了相同的并发编程API。 本文会介绍 pthread 、 NSThread 、GCD、NSOperationQueue,以及 NSRunLoop。实际上把 run loop 也列在其中是有点奇怪,因为它并不能实现真正的并行,不过因为它与并发编程有莫大的关系,因此值得我们进行一些深入了解。

            由于高层 API 是基于底层 API 构建的,所以我们首先将从底层的 API 开始介绍,然后逐步扩展到高层 API。不过在具体编程中,选择 API 的顺序刚好相反:因为大多数情况下,选择高层的 API 不仅可以完成底层 API 能完成的任务,而且能够让并发模型变得简单。

    线程

             线程(thread)是组成进程的子单元,操作系统的调度器可以对线程进行单独的调度。实际上,所有的并发编程 API 都是构建于线程之上的 —— 包括 GCD 和操作队列(operation queues)。

          多线程可以在单核 CPU 上