前言
什么是线程?
线程是能够独立运行的基本单位,也是独立调度和分派的基本单位。
什么是进程?
进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,它具有一定独立功能的程序关于某次数据集合的一次运行活动,它是操作系统分配资源的基本单元。每个进程之间是相互独立的, 每个进程均运行在其专用且受保护的内存空间内。
进程和线程的关系
线程是进程的执行单元,进程的所有任务都在线程中执行;
线程是 CPU 调用的最小单位;
进程是 CPU 分配资源和调度的单位;
一个程序可以对应过个进程,一个进程中可有多个线程,但至少要有一条线程;
同一个进程内的线程共享进程资源。
相同点:
进程和线程都是有操作系统所提供的程序运行的基本单元,系统利用这些基本单元实现系统对应用程序的并发性。
不同点:
- 进程和线程的主要差别在于他们是不同的操作系统资源管理方式。
- 进程有独立的地址空间,一个进程
crash
后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。一个线程crash
就等于整个进程crash
。
多进程的程序比单线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
什么是多线程?
多线程是指实现多个线程并发执行的技术。
什么是并发?
并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
多线程的优点和缺点
优点
可以大大提交软件的执行效率和资源(CPU、内存)利用率。
缺点
当线程过多会消耗大量的资源,每开一条线程也是需要耗费资源的(iOS主线程占用1MB内存空间,子线程占用512KB)。
iOS开发中的多线程
iOS程序在启动后会自动开启一个线程,称为主线程
,用来显示、刷新UI界面,处理点击、滚动等事件,所以耗费时间的事件(比如网络请求、磁盘操作等)尽量不要放在主线程,避免造成阻塞主线程造成界面卡顿。
线程执行任务方式分为:
- 异步执行
异步是指在多线程中,进程A在执行的进程线程B不等待线程A是否执行完成,而是直接执行它的相应操作。
- 同步执行
同步执行指的是在多线程中,一个进程A在执行的时候,若线程A需要一段时间才能执行完成,那么另外一个线程B将会一直等待下去,直到线程A执行完成才会继续执行。
在iOS开发过程中多线程的实现方式有:
pthread
NSThread
NSOperation
GCD