进程与线程
进程
- 进程是指在系统中正在运行的一个应用程序
- 每个进程之间是独立的,每个进程均运行在专用且受保护的内存空间内(如打开迅雷和Xcode,系统就会启动2个进程)
线程
- 一个进程要执行任务,必须拥有线程,每个进程至少有一个线程
- 一个进程的所有任务都在线程中执行
线程串行
- 一个线程中的任务是串行的
- 如果要在1个线程中执行多个任务,只能一个接一个的按顺序执行
- 在统一时间内,一个线程只能执行一个任务(比如使用一个线程下载多个文件,只能一个一个的下载)
线程并行(多线程)
- 多线程:一个进程可以开启多个线程,每个线程可以并行(同时)执行不同的任务
- 多线程原理:同一时间,cpu只能处理一个线程,只有一个线程在执行。多线程并发执行,其实是cpu快速的在多个线程之间调度
- 如果cpu调度线程的时间足够快,就会造成很多线程在同时进行的假象
- 如果线程非常多,会造成耗费大量的cpu资源
- 多线程的优点:能适当提高程序的执行效率,能适当的提高资源利用率
- 多线程的缺点:创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB),栈空间(子线程512KB,主线程1MB,也可以使用-setStackSize:设置,但必须是4KB的倍数,而且最小16KB),创建线程大约需要90毫秒的创建时间。如果开启大量线程,会降低程序的性能,cpu在调度线程的开销会增加,而且程序设计更为复杂(比如线程之间的通信,多线程的数据共享)
进程和线程的比较
- 线程是cpu调用(执行任务)的最小单位
- 进程是cpu分配资源和调度的单位
- 一个程序可以有多个进程,一个进程中可以有多个线程,但至少有一个线程
- 同一个进程内的线程可以共享进程的资源