本文共 1359 字,大约阅读时间需要 4 分钟。
a.拥有资源
进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
b.调度
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程的切换,从一个进程的线程切换到另一个进程中线程时,会引起进程切换。
c.系统开销
由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备,所付出的开销远大于创建或撤销线程时的开销。 在进程进程切换时,涉及当前执行进程CPU环境的保存以及新调度进程CPU环境的设置,而线程切换时只需保存和设置少量寄存器内存,开销很小;
d.通信方法
线程间可以通过直接读写同一进程中的数据进行通信,但是进程间通信需要借助IPC。
就绪状态(ready):等待被调度;
运行状态(running)
阻塞状态(waiting):等待资源
不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法;
批处理系统:
交互式系统:
哲学家就餐的问题,如何防止死锁的发生,可以设置两个条件:
- 必须同时拿起左右两根筷子;
- 只有在两个邻居都没有进餐的情况下才允许就餐;
进程同步与进程通信很容易混淆,它们的区别在于:
为了能够达到进程同步的目的,需要让进程间进行通信,传输一些进程同步所需要的信息;
a.管道
管道是通过调用pipe函数创建的,fd[0]用于读,fd[1]用于写;
b.FIFO命名管道
也被称为命名管道,去除了管道只能在父子进程中使用的限制。常用于客户进程和服务器进程之间传递数据。
c.消息队列
相比较FIFO,消息队列:
d.信号量
它是一个计数器,用于为多个进程提供对共享数据对象的访问;
e.共享存储
允许多个进程共享一个给定的存储区,因为数据不需要在进程之间复制,所以这是最快的一种IPC;
f.套接字
与其它通信机制不同,它可用于不同机器间的进程通信;
相关问题对比:
进程通信:管道、FIFO、消息队列、共享存储、信号量、套接字
线程通信:共享变量、阻塞唤醒、管道
转载地址:http://lcwdf.baihongyu.com/