进程与线程
进程
并发执行的程序在执行过程中分配和管理资源的基本单位。竞争计算机系统资源的基本单位。每一个进程都有一个自己的 地址空间 即进程空间。
线程
被系统独立调度和分派的基本单位,不拥有系统资源,而是与所处同一个进程中的其他线程共享进程所拥有的全部资源。
关系
- 一个线程只能属于一个进程,一个进程可以有多以线程,但至少有一个线程。
- 资源分配给进程,同一个进程中的所有线程共享该资源。
- 处理机分配给线程,即真正在处理机上运行的是线程
- 线程在执行过程中需要同步。不同进程间的线程间要利用消息通信的方式进行同步
区别
- 调度:线程作为调度的最基本单位,进程作为拥有资源的基本单位。
- 并发性:不仅进程之间可以并发执行,同一个进程的线程间也可以并发执行。
- 拥有资源:进程是拥有资源的一个独立单元。线程不拥有资源,可以访问所属进程的所有资源。
- 系统开销:在创建或撤销进程时,由于系统要为之分配和回收资源,因此系统开销要比线程大。
进程的几种状态
就绪态、运行态、阻塞态。
就绪态:
当进程已分配到除 CPU 以外的所有必要资源后,只要在获得 CPU ,便可立即执行
运行态
进程已获得 CPU ,其程序正在执行
阻塞态
正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即程序的执行受到阻塞
就绪→执行
处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。
执行→阻塞
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
进程间通信、线程间通信
进程间通讯方法
文件映射,共享内存,匿名管道,命名管道 ,邮件槽, 剪切板 ,动态数据交换,对象链接与嵌入, 动态链接库 ,远程过程调用等
- 管道(pipe):是一种半双工的通信方式, 数据只能单向流动,而且只能在具有亲缘关系的进程间使用
- 命名管道(named pipe):半双工的通信方式,但是 它允许无亲缘关系进程间的通信 。
- 信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。 它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源 。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
- 消息队列(message queue):消息队列 是一个消息的链表 ,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流、缓冲区大小受限等缺点。
- 信号(signal):信号是一种比较复杂的通信方式,用于 通知接收进程某个事件已经发生 。
- 共享内存(shared memory):共享内存就是 映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
线程间通讯方法
事件,临界区,互斥量,信号量 等
进程同步与互斥的区别
互斥
某一资源同时只允许一个访问者对它进行访问,具有唯一性和排他性 。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步
在互斥的基础上,通过其他机制实现访问者对资源的有序访问 。在大对数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。