在后台,我们的app其实是在同一时间内运行着多种集合的命令指示,也就是说这个app可以同时使用2个或者3个cpu中心。每一个cpu都能独立的完成自己的工作,这也大大提升了app的性能。这种工作原理就叫做threads,它有以下几点重要的附加条件(provisos):
- threads执行你所给它的代码,它并不是随机的从每一个viewDidLoad()找几行代码来执行。这也就是说,系统是默认只使用一个cpu来执行代码的,因为我们没有创建给其他cpu执行的threads。
- 所有的user interface的工作都必须发生在main thread中,main thread也就是我们程序建立的初始thread。如果你想尝试在其他thread中执行这些代码,那结果也许会成功,也许会失败,也许会诱发一些出人意料的问题,或者干脆它会崩溃。
- 我们无法控制什么时候thread会被执行,或者以什么样的顺序来执行。我们只是创建threads,把它们交给系统,让系统来以最优的方式去决定什么时候,以什么样的顺序来执行。
- 因为我们无法控制执行顺序,我们必须要十分警惕的确保每次只有一个thread在更改我们的数据。
大体来讲,如果你在访问远程资源,那应该使用后台thread(任何一个不是main
thread的thread)。如果你在执行一些缓慢的代码,那也用后台thread;或者有一些可以平行执行的代码,比如要给100张照片加滤镜,那就使用若干个后台threads来执行他们。
这里说一下GCD(Grand Central Dispatch),GCD的能力就是让我们不用再去考虑创建和使用多线程(multithreading)的麻烦,我们不用去考虑如何创建或者销毁线程,不用去考虑我们是否创建了最佳数量的线程,GCD自动的给我们创建线程,并且会以最佳的方式来创建执行。
GCD automatically handles thread creation and management, automatically balances based on available system resources, and automatically factors in Quality of Service to ensure your code runs as efficiently as possible.