# 什么是进程与线程

进程(Process)和线程(Thread)是操作系统中的两个重要概念,用于管理和执行程序的执行单元。它们在多任务处理和并发执行中起着关键作用。

# 进程

进程是计算机系统中运行的程序的实例。每个进程都有自己的内存空间、代码和数据,以及与其他进程隔离的资源。进程可以看作是一个独立的执行环境,可以执行自己的任务。每个进程都有一个唯一的进程标识符(PID),用于区分和管理不同的进程。

一个进程可以包含多个线程,这些线程共享同一个进程的资源,如内存空间、文件句柄等。不同进程之间的通信相对复杂,通常需要使用进程间通信(IPC)机制,如管道、消息队列、共享内存等。

# 线程

线程是进程内的执行单元,一个进程可以包含多个线程。线程共享同一个进程的代码和数据,但每个线程拥有自己的栈空间和程序计数器。因为线程共享相同的内存空间,它们之间的通信和数据共享更加方便,但也需要适当的同步控制来避免竞态条件和数据不一致问题。

多线程的使用可以实现并发执行,提高程序的响应速度和资源利用率。常见的线程使用场景包括图形界面应用程序中的响应性、多媒体处理、网络服务器等。

# 程序并发执行的特征

  1. 间断性:并发程序之间相互制约
  2. 失去封闭性:多个程序共享全机资源,执行状态收外界因素影响
  3. 不可在现性:程序经过多次执行后,虽然其执行时的环境和初始条件都相同,但得到的结果却各不相同

# 进程的特性

  1. 动态性(最基本的特征)
  2. 并发性
  3. 独立性
  4. 异步性:不可预知的速度

# 进程控制

一般包括以下几个方面:

  1. 进程创建
  2. 进程终止
  3. 进程阻塞与唤醒
  4. 进程挂起与激活

# 进程创建

UNIX 下的进程创建 ——fork ()

# 消息机制

直接通信方式一一消息缓冲队列

这是指发送进程利用 OS 所提供的发送命令,直接把消息发送给目标进程。此时,要求发送进程和接收进程都以显式方式提供对方的标识符。通常,系统提供下述两条通信命令 (原语):

Send (Receiver, message): 发送一个消息给 Receiver

Receive (Sender,message): 接收 Sender 发来的消息

例如,原语 Send (P,m) 表示将消息 m, 发送给接收进程 P; 而原语 Receive (P,m) 则表示接收由 P 发来的消息 m。

# 进程通信

进程通信实例 ------ 管道通信方式 Pipe

write (fd [1],buf,size); 将 buf 中长为 size 字符的消息送入 fd [1] 口

read (fd [0], buf’,size); 从 fd [O] 口读出 size 个字符置于 buf 中

# 进程与线程的比较

# 关于调度的基本单位

在传统 OS 中,拥有资源、独立调度和分配的基本单位都是进程。

在引入线程的 OS 中,线程作为调度和分派的基本单位,进程作为拥有资源的基本单位。

在同一进程中,线程的切换不会引起进程切换,在由一个进程中的线程切换到另一个进程中的线程时,将会引起进程切换。

# 并发性

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,也可并发执行

# 拥有资源

进程是系统中拥有资源的一个基本单位,它可以拥有资源

线程本身不拥有系统资源,仅有一点保证独立运行的资源

允许多个线程共享其隶属进程所拥有的资源

# 独立性

同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多

# 开销

在创建或撤消进程时,OS 所付出的开销将显著大于创建或撤消线程时的开销

线程切换的代价远低于进程切换的代价。

同一进程中的多个线程之间的同步和通信也比进程的简单

# 支持多处理机系统

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KarryLiu 微信支付

微信支付

KarryLiu 支付宝

支付宝