什么是进程?
进程是指在系统中正在运行的一个应用程序
每个进程之间是相互独立的,每个进程都运行在其专用且受保护的内存空间
什么是线程?
一个进程想要执行任务,必须得有线程(每个进程至少有一个线程)
一个进程(程序)的所有Task都在线程中执行
线程中的串行
一个线程中的任务的执行是串行的
如果要在一个线程中执行多个任务,那么只能一个个的按顺序执行这些任务
也就是说,在同一时间内,一个线程只能执行一个任务
进程和线程的比较
线程是CPU调用(执行任务)的最小单位
进程是CPU分配资源和调度的单位
一个程序可以对应多个进程,一个进程可以有多个线程,但至少有一个线程
同一个进程内的线程共享进程的资源
打个比方,车间是进程,那么车间内的工人就是线程
多线程
一个进程中可以开启多线程,每条线程可以并行(同时)执行不同的任务
多线程的原理
同一时间,CPU只能处理一条线程,只有一条线程在执行Task
多线程并发(同时)执行,其实就是CPU快速的在多条线程之间调度(切换)
CPU调度线程的时间足够快,就会造成了多线程并发执行的假象
如果线程非常多,会造成CPU在N条线程之间调度,CPU会累死,消耗大量的CPU资源,会降低线程运行效率
多线程的优点
提高执行的执行效率
能适当的提高资源利用率(CPU,内存利用率)
CPU一次只能处理一条线程,比如说,处理一条线程时利用率是20%,那么多线程就会将CPU的利用率完全用到。
多线程的缺点
创建线程时需要开销(空间)。iOS主要成本:创建线程大概要90毫秒,栈空间(子线程512kb,主线程1MB),内核数据结构(1kb左右)
如果大量开启线程,会降低程序性能
线程越多,CPU在调度线程上的开销就越大(程序卡顿,运行不流畅)
使程序设计更加复杂:比如线程之间的通信。多线程之间的数据共享。
主线程做UI处理 子线程做耗时操作
概念图