iOS-多线程(一)基本概念
2019-07-06 本文已影响0人
厦门_小灰灰
- 进程
- 线程
- 线程状态与生命周期
- iOS中多线程的实现方案
进程
- 理解为一个正在运行的应用程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础;
- 每个进程都是独立的,它们运行在其专用且受保护的内存空间内;
- 进程是一个实体;
线程
- 线程是进程的基本执行单元,负责代码的执行,线程很轻所以线程切换非常快并且开销小;
- 进程的所有任务都在线程中执行;
- 一个进程中只有一个主线程,在程序启动后自动创建,一个进程对应1-n个线程;
- 线程串行:在同一时间内,一个线程只能执行一个任务,多个任务只能一个接着一个按顺序执行;
- 一个进程中的多个线程都可以共享改进程中所有的资源;
- 线程不是一个可执行的实体;
主线程
- 程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”;
- 主要作用:1.显示、刷新UI页面;2.处理UI事件;凡是和UI相关的操作应放在主线程中操作;
- 不要将耗时的操作放到主线程中,耗时操作应放在子线程;
单线程
- 进程中仅包含一个主线程的程序,成为单线程程序;
- 所有代码只能按照顺序执行,无法并发执行;
多线程
- 进程中可以根据需要开辟若干子线程,各自的执行互不影响,因此能够并发执行;
- 单核的情况下,CPU同一时间只能执行一个线程的任务。关于多线程并发,是因为CPU快速的在多个线程之间调度,当调度的速度很快的时候,就会出现貌似并发的假象;
- CPU在线程中调度,会消耗CPU的资源;
多线程优缺点:
- 优点:适当的提高程序的执行效率以及资源利用率(CPU、内存利用率);
- 缺点:
(1)创建线程是有一定的开销,内核数据结构(大约1kb)、栈空间(子线程512kb,主线程1MB);
(2)创建线程大约90毫秒的时间;
(3)如果创建大量的线程,会占用大量的内存空间,会影响性能;(4)线程越多,CPU调度线程的开销就越大;
(5)涉及到更多的线程之间的通讯以及线程安全的问题;
总结一句:空间换时间。
线程状态与生命周期
线程状态图:
线程状态图.png
通过上面的图,可以看出线程总共有五个状态:
- 新建:实例化线程对象;
- 就绪:线程对象执行start方法,会加入可调度线程池等待CPU调度;
- 运行:CPU调度到当前线程,执行当前线程中的任务。在线程的任务执行完成前,线程状态可能会在就绪和运行之间来回切换。状态的切换是有CPU负责的;
- 阻塞:通过睡眠或者锁,阻塞线程的执行;
- 死亡:线程执行完毕为正常死亡,在线程内部中止执行/在主线程中止线程对象为非正常死亡;
iOS中多线程的实现方案
iOS多线程的四种解决方案分别是:pthread,NSThread,GCD, NSOperation。
iOS中多线程的实现方案.png
将在后面的文章中,各自介绍。