计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者, 它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。
一、进程
1、进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。
2、单CPU只能同时运行单个进程,多CPU可以同时运行多个进程。
3、每一个进程都有一个自己的地址空间,至少有 5 种基本状态,它们是:初始态,等待状态,就绪状态,执行态,终止状态。
4、进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。
二、线程
1、线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。
2、一个线程只能属于一个进程,而一个进程可以包括一个或多个线程。
3、一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
4、一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
5、一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。
三、进程与线程关系示意图
四、并行与并发
1、并行:多个线程或者多个进程同时运行,当有多个CPU或者多核CPU时才有可能能实现并行。
2、并发:单个CPU(或多个CPU)将多个线程中的每个线程(或多个进程中的每个进程)按时间分为一个一个的时间片,每一个时刻只执行某个线程(或进程)的时间片,时间片过期后转而执行下一个线程(或进程)的时间片。
3、并发宏观上看上去像是并行,但是微观上并不能做到并行。
五、进程与线程的区别
1、根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
2、开销方面:进程之间切换开销大
,每个进程都有独立的代码和数据空间(程序上下文);线程之间切换开销小
,线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC)。
3、所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)。
4、内存分配:系统为每个进程分配不同的内存空间;而对线程而言,除CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源
),线程组之间只能共享资源。
5、包含关系:线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程
。
六、线程挂了,是否影响进程
1、进程(主线程)创建了多个线程,多个子线程均拥有自己独立的栈空间(存储函数参数、局部变量等),但多个子线程和主线程共享堆、全局变量等非栈内存。
2、如果子线程的崩溃是由本身导致,那么就不会对主线程和其他线程产生影响。
3、如果子线程的崩溃导致了共享区域的破坏,那么会对主线程和其他进程产生影响。
七、多线程的五个状态
在一个程序运行的过程中,每个线程都存在如下图的几种状态
1、创建状态:线程对象一旦创建就进入创建状态。
2、就绪状态:在线程对象创建完成后不会立刻调度执行,而是进入就绪状态,因为在运行前还有一些准备工作要做。
3、运行状态:准备工作完成后进入运行状态,一个运行状态的线程可能正在运行也可能没有运行,这取决于操作系统给线程提供运行的时间(也可称为可运行状态
)。
4、阻塞状态:当一个线程被插队、礼让别的线程或者休眠时就会进入到阻塞状态,阻塞状态解除后回到就绪状态,等待CPU调度执行。
5、死亡状态:当一个运行状态的线程自然执行完毕后或者中断后线程进入死亡状态,死亡后无法再次启动。
八、进程间的通信方式
- 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。
1、管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
2、信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
3、消息队列(message queue):消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新信息;对消息队列有读权限的进程则可以从消息队列中读取信息。
4、共享内存(shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
5、信号量(semaphore):主要作为进程之间及同一种进程的不同线程之间的同步和互斥手段。
6、套接字(socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。