相关文章链接:
1.多线程简介(本文)
2.实现多线程的3种方法
......待续
学习是由已知的知识模型推理未知的知识模型的的过程。
本文适合学习完objective-c基础,想进一步提高做iOS开发的同学阅读。
在说线程的时候,我们先看看进程。
1.进程
每一个运行在系统中的应用程序,都有一个进程。进程是独立的,有着自己专属运行空间。进程的出现是为了解决多任务处理系统的问题。
首先看看单任务处理系统的示意图:
CPU按顺序执行任务1,任务2,任务3.... 前面的任务没有执行完,后面的任务是没法执行的。任务4哪怕再紧急,用的时间再短,也要等前面费时的任务3执行完才能轮到它。想象一下,你在听音乐的时候,想看视频,那就先把音乐听完才能去看,如果这样我估计你会疯掉吧。不过计算机刚刚出现的时候,系统就是单任务的。
任务1,任务2.....这里所说的任务 也就是运行在iOS系统中的app
幸好,多任务处理系统来了。
时间片(每个进程被分配一时间段,称为时间片,即进程允许执行的时间)。
注意:因为时间片的时间很短,CPU执行的速度非常快,每个任务几乎都能得到响应并执行。造成这些任务同时运行的假象。实际上在单个时间片内,只有一个任务在执行。
这里我们可以看出,进程是伴随多任务处理系统出现的一个产物。满足了我们阅读的同时,又想听音乐的愿望。
2.线程
每个app对应一个进程,系统协调进程之间的关系。但是在app内部,也有很多的不同的操作,有些操作是紧急的,有些操作是耗时的。
那么如何合理的安排这些操作呢?线程应运而生。原理与以上进程的协调是相似的。
所以有时候称线程为轻量级进程。
- 线程是进程中一个独立的执行路径(控制单元)
- 一个进程中至少包含一条线程,即主线程
- 我们可以把耗时的操作放在别的线程中执行
- UI相关的操作都在主线程中,所以要在主线程中更新UI
以淘宝为例,页面上有很多的图片,如果在主线程中下载图片,那么页面就会非常的卡。所以会把下载图片和耗时的操作放在别的线程。
3.使用多线程的优缺点
优点:
- 充分发挥多核处理器优势,将不同线程任务分配给不同的处理器,真正进入“并行运算”状态
- 将耗时的任务分配到其他线程执行,由主线程负责统一更新界面会使应用程序更加流畅,用户体验更好
- 当硬件处理器的数量增加,程序会运行更快,而程序无需做任何调整
缺点:
- 新建线程会占用更多的内存和cpu,线程太多会降低系统的总体性能
误区:
- 多线程技术只是并发的执行任务,让优先级更多,更紧急的操作得到响应,并不会提高单个算法的执行效率。