进程:
进程定义:
(1)进程是程序的一次执行过程。
(2)进程可定义为一个数据结构及能在其上进行操作的一个程序。
(3)进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位。
进程的特点:(1)动态性 (2)并发性 (3)独立性 (4)异步性 (5)结构性
进程 = 进程控制块(PCB) + 程序段 + 数据段
线程:
操作系统中引入进程的目的是为了使用多道程序并发执行,以改善资源利用率及提高系统吞吐量;而操作系统中再引入线程,则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
线程定义:
(1)线程是进程内的一个执行单元,比进程更小的执行单位
(2)线程是进程内的一个可调度实体
(3)线程是进程内一个相互独立的,可调度的执行单元。
(4)线程和进程不同的使线程本身不能单独运行,它只包含在程序中,只能在程序中执行。
在同一进程中,线程的切换不会引入进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
线程的串行:
一个线程中任务的执行是串行的.
如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务
也就是说,在同一时间内,一个线程只能执行1个任务
比如在一个线程中下载3个文件(分别是文件A、文件B、文件C)
先下载文件A,下载完成后,才能下载文件B, 之后才能下载文件C.
多线程
一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务
进程 ->车间,线程->车间工人
多线程技术可以提高程序的执行效率
比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C)
文件A,文件B,文件C同时下载.
多线程的优缺点
多线程的优点
能适当提高程序的执行效率
能适当提高资源利用率(CPU、内存利用率)
多线程的缺点
开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
线程越多,CPU在调度线程上的开销就越大
程序设计更加复杂:比如线程之间的通信、多线程的数据共享
多线程在iOS开发中的应用
主线程:一个iOS程序运行后,默认会开启一条线程,称为“主线程”或“UI线程”
主线程的主要作用
(1) 显示刷新UI界面
(2) 处理UI事件(例如:点击事件、滚动事件、拖拽事件等)
主线程的使用注意:
(1) 别将比较耗时的操作放到主线程中。(比如下载操作)
(2) 耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验
进程与线程的联系与区别:
(1)拥有资源方法:
每一个进程都有一个独立的地址空间,它拥有若干代码段和数据段,此外还拥有若干打开文件、主存以及至少一个线程。这些资源随着进程的生成而产生,当进程终止时,它们也同时被系统回收。创建进程时,系统同时为进程创建第一个线程,进程中只要还有一个线程在执行,这个进程就不会终止,直到它的所有线程终止后,才终止。线程拥有较少的资源,创建一个进程比创建一个线程开销大。
进程是资源拥有的基本单位,线程是独立调度的基本单位。
(2)调度方面:
进程调度时,进程上下文的切换需要较大的系统开销;而采用线程调度时,由于同一个进程内的线程共享进程资源,只需要把线程仅有的一小部分资源交换即可,从而提高了系统效率。即,线程切换比进程切换快的多。但一个进程的线程向另一个进程的线程切换时,将会引起进程上下文的切换。
(3)并发性方面:
引入线程后,不仅进程之间可以并发执行,同一进程内的多个线程也可以并发执行,从而提高了资源的利用率和系统的吞吐量。
(4)安全性方面:
同一进程的多线程共享进程的所有资源。一个错误的线程可以任意改变另一个线程使用的数据而导致错误的发生,而采用多进程实现不会产生这一问题,因为系统不允许一个进程有意或无意地破坏另一个进程。从保护的角度而言,多进程比多线程更安全。