进程、线程

本文深入探讨了进程和线程的区别,强调进程作为资源分配单位,线程作为执行单位的角色。线程共享进程地址空间,拥有更快的上下文切换速度和资源占用优势。介绍了进程间的通信方式,如管道、信号量、消息队列等,并讨论了线程同步的锁机制和信号量。
摘要由CSDN通过智能技术生成

进程、线程

1、什么是进程、线程

进程是一个程序被加载到内存执行的过程,它是一个动态的概念。线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元。进程是操作系统分配资源的最小单位,线程是操作系统调度执行的最小单位。打个比喻,操作系统是好像一个大工厂,工厂里面的一条条流水线就是一个个的进程,然后流水线上的工人负责整个流水作业的全部或者一小部分,这就叫线程。进程是真正的“打工人”,干活的实体。


2、进程和线程的区别

  • 进程有自己独立的地址空间(每个进程都有拥有4GBytes的虚拟地址空间),多个线程共用同一个地址空间。
  • 同一进程内的每个线程共享代码段(.text),堆区(heap),全局数据区(.data.bss),文件描述符表。
  • 同一进程内的每个线程独享自己的栈、寄存器。

3、进程线程的特点

  • 进程

    • 进程拥有自己的地址空间,各进程间相互独立,一个进程挂死,不会影响到其他进程
  • 线程

    • 线程占更小的系统资源,线程的上下文切换比进程要快的多。

      上下文切换:进程 / 线程分时复用 CPU 时间片,在切换之前会将上一个任务的状态进行保存,下次切换回这个任务的时候,加载这个状态继续运行,任务从保存到再次加载这个过程就是一次上下文切换。

    • 线程启动速度快,退出也快,对系统资源的冲击小。

    • 一个进程内的某一个线程挂掉,那么整个进程就会挂掉。


4、进程间的通讯方式

  1. 管道pipe。半双工,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,常见于父子进程。
  2. 有名管道FIFO。半双工,数据只能单向流动,允许无亲缘关系进程间的通信。
  3. 消息队列MessageQueue。消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问,防止多进程访问共享资源时产生竞争。是进程同步的一种手段。
  5. 套接字Socket:用于不同机器间的进程通信,网络通信少不了它。
  6. 信号 Signal: 段错误、kill -9 的时候就是这种信号。

5、线程间通信方式

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

  1. 锁机制:包括互斥锁、条件变量、读写锁
    • 互斥锁提供了以排他方式防止数据结构被并发修改的方法,常用于多线程间对共享资源的访问保护。
    • 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
    • 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
  2. 信号量机制(Semaphore):信号量既是是进程同步的一种手段,也是线程同步的一种手段
    锁一起使用。
  3. 信号量机制(Semaphore):信号量既是是进程同步的一种手段,也是线程同步的一种手段
  4. 信号机制(Signal):类似进程间的信号处理。线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值