在后台,我们的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.
网友评论