进程和线程的概念
进程
说明
进程是指在系统中正在运行的一个应用程序
每个进程间是独立的,每个进程均运行在其专用且受保护的内存空间内
线程
说明
一个进程要执行任务,必须有线程(每一个进程至少要一个线程)
一个进程(程序)的所有人物都在线程中执行
线程是进程中的一条执行路径
线程的串行
说明
一个线程里面任务的执行顺序是串行的
如果要子1个线程中执行多个任务,那么只能一个一个的按照顺序执行这些任务
主线程
说明
一个iOS程序运行后,默认会开启一条线程,称为 主线程 或 UI线程
iOS中的和UI相关的所有操作必须在主线程中执行
作用
显示\刷新UI界面
处理UI事件(比如点击事件,滚动事件,拖拽事件)
使用注意
不要将比较耗时的操作放倒主线程中
耗时操作会阻塞主线程,严重影响UI的流畅度,给用户一种卡的体验
可将耗时操作放在子线程中执行
子线程
说明
iOS中除了主线程之外的线程都是子线程
子线程也称为(后台线程,非主线程)
多线程
说明
一个进程中可以开启多条线程,每个线程可以并行执行不同的任务
原理
同一时间,CPU只能处理一条线程,只有1条线程在执行
多线程的并发执行,其实是CPU快速的在多条线程之间调度(切换)
如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
优点
能适当提高程序的执行效率
能适当的提高资源的利用率(CPU,内存的利用率)
缺点
创建线程是有开销的,iOS下主要成本包括:
内核数据结构(大约1KB)
栈空间(子线程512KB,主线程1MB,可使用-setStackSize设置,最小16K)
创建线程答曰需要90毫秒的时间
如果开启大量的线程,会降低程序的性能
线程越多,CPU在调度线程上的开销就越大
程序设计更佳复杂,比如线程之间的通信,多线程的数据共享
资源共享
一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
多个线程访问同一个对象,同一个变量,同一个文件
安全隐患
当多个线程访问同一块资源时,很容易引发数据错乱和安全问题
可用 @synchronized 加入互斥锁来解决此问题
进程和线程的比较
线程是CPU调用(执行任务)的最小单位。
进程是CPU分配资源和调度的单位
一个程序可以对应多个线程,一个进程中可以有多个线程,但至少有一个线程
同一个进程内的线程共享进程的资源