一、进程、线程
进程:
1.进程是一个具有一定独立功能的程序关于某次数据集合的一次运行活动,它是操作系统分配资 源的基本单元.
2.进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,我们可以理解为手机上 的一个 app.
3.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内,拥有独立运行所需的全部资源
线程:
1.程序执行流的最小单元,线程是进程中的一个实体.
2.一个进程要想执行任务,必须至少有一条线程.应用程序启动的时候,系统会默认开启一条线程, 也就是主线程
进程和线程的关系:
1.线程是进程的执行单元,进程的所有任务都在线程中执行
2.线程是 CPU 分配资源和调度的最小单位
3.一个程序可以对应多个进程(多进程),一个进程中可有多个线程,但至少要有一条线程
4.同一个进程内的线程共享进程资源
二、多进程、多线程
多进程
打开mac 的活动监视器,可以看到很多个进程同时运行
1.进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。
2.进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它 们就是处于运行状态下的操作系统本身;所有由用户启动的进程都是用户进程。进程是操作系统进行资源分配的单位。
3.进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。在同一个时间里,同 一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程。
多线程
-
同一时间,CPU 只能处理 1 条线程,只有 1 条线程在执行。多线程并发执行,其实是 CPU 快速地在多条 线程之间调度(切换)。如果 CPU 调度线程的时间足够快,就造成了多线程并发执行的假象
-
如果线程非常非常多,CPU 会在 N 多线程之间调度,消耗大量的 CPU 资源,每条线程被调度执行的频次会降低(线程的执行效率降低)
-
多线程的优点: 能适当提高程序的执行效率 能适当提高资源利用率(CPU、内存利用率)
-
多线程的缺点: 开启线程需要占用一定的内存空间(默认情况下,主线程占用 1M,子线程占用 512KB),如果开启大量的 线程,会占用大量的内存空间,降低程序的性能线程越多,CPU 在调度线程上的开销就越大程序设计更加复杂:比如线程之间的通信、多线程的数据共享
三、任务、队列
任务
任务就是执行操作的意思,也就是在线程中执行的那段代码。在 GCD 中是放在 block 中的。执行任务有两种 方式:同步执行(sync)和异步执行(async)
同步(Sync):同步添加任务到指定的队列中,在添加的任务执行结束之前,会一直等待,直到队列里面的 任务完成之后再继续执行,即会阻塞线程。只能在当前线程中执行任务(是当前线程,不一定是主线程), 不具备开启新线程的能力。
异步(Async):线程会立即返回,无需等待就会继续执行下面的任务,不阻塞当前线程。可以在新的线程中 执行任务,具备开启新线程的能力(并不一定开启新线程)。如果不是添加到主队列上,异步会在子线程中执行任务
队列
队列(Dispatch Queue):这里的队列指执行任务的等待队列,即用来存放任务的队列。队列是一种特殊 的线性表,采用 FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从 队列的头部开始读取。每读取一个任务,则从队列中释放一个任务
在 GCD 中有两种队列:串行队列和并发队列。两者都符合 FIFO(先进先出)的原则。两者的主要区别是: 执行顺序不同,以及开启线程数不同。
-
串行队列(Serial Dispatch Queue): 同一时间内,队列中只能执行一个任务,只有当前的任务执行完成之后,才能执行下一个任务。(只 开启一个线程,一个任务执行完毕后,再执行下一个任务)。主队列是主线程上的一个串行队列,是 系统自动为我们创建的
-
并发队列(Concurrent Dispatch Queue): 同时允许多个任务并发执行。(可以开启多个线程,并且同时执行任务)。并发队列的并发功能只有 在异(dispatch_async)函数下才有效
网友评论