第一部分 多线程基础
一、线程的基本概念
1.多线程出现的背景
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了通过提高资源使用效率来提高系统总体的效率。线程是在同一时间需要完成多项任务的时候执行的。
2.进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
简单来说,进程是指在系统中正在运行的一个应用程序,每一个程序都是一个进程,并且进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。
3.线程
线程,是程序执行流的最小单元线程是程序中一个单一的顺序控制流程。是进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。
简单来说,1个进程要想执行任务,必须得有线程。
线程中任务的执行是串行的
要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务
也就是说,在同一时间内,1个线程只能执行1个任务
由此可以理解线程是进程中的1条执行路径
4.多线程
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
原理:
- 同一时间,CPU只能处理1条线程,只有1条线程在工作(执行)
- 多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
- 如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
注意:多线程并发,并不是cpu在同一时刻同时执行多个任务,只是CPU调度足够快,造成的假象。
优点:
- 能适当提高程序的执行效率
- 能适当提高资源利用率(CPU、内存利用率)
缺点:
- 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
- 线程越多,CPU在调度线程上的开销就越大
二、iOS开发中的应用
1.主线程
一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”。
作用:
显示\刷新UI界面
处理UI事件(比如点击事件、滚动事件、拖拽事件等)
注意:
刷新UI必须放在主线程
别将比较耗时的操作放到主线程中
耗时操作会卡住主线程,严重影响UI的流畅度
2.实现方案
iOS多线程系列之一:多线程基础
iOS多线程系列之二: NSThread
iOS多线程系列之三:GCD
iOS多线程系列之四:NSOperation以及多线程技术比较