进程和线程小结

1、进程的概念
当我们在一个现代操作系统上运行一个程序时,会得到一个假象,就好像我们的程序是系统中当前运行着的唯一程序。我们的程序好像是独占地使用处理器和存储器。处理器就好像是无间断地一条接一条地执行程序中的指令。最后,我们的程序中的代码和数据就好像是系统存储器中唯一的对象。这些假象都是通过进程的概念提供给我们的。
进程的经典定义就是一个执行中额程序的实例。系统中的每个程序都是运行在某个进程的上下文中的。上下文是由程序正确运行所需的状态组成。这个状态包括存放在存储器中的程序的代码和数据,它的栈、通用寄存器的内容、程序计数器、环境变量以及打开文件的描述符的集合。
为了实现进程模型,操作系统维护着一张表格,即进程表。每个进程占用一个进程表项。该表项包含了进程状态的重要信息。

2、线程的概念
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位。
进程中的不同线程不像不同进程之间存在很大的独立性。所有的线程都有完全一样的地址空间。这意味着它们也可以共享同样的全局变量。
除共享地址空间外,所有线程还共享同一个文件集、子进程、报警和相关信号等。

  同一进程中所有线程共享的内容:
  地址空间
  全局变量
  打开文件
  子进程
  信号与信号处理程序

  每个线程自己的内容:
  程序计数器
  寄存器
  堆栈
  状态

线程解决的最大问题就是它可以很简单地表示共享资源的问题,这里说的资源指的是存储器资源,资源最后都会加载到物理内存,一个进程的所有线程都是共享这个进程的同一个虚拟地址空间的,也就是说从线程的角度来说,它们看到的物理资源都是一样的,这样就可以通过共享变量的方式来表示共享资源,也就是直接共享内存的方式解决了线程通信的问题。而线程也表示一个独立的逻辑流,这样就完美解决了进程的一个大难题。

最后再总结一下 进程VS 线程

  1. 进程拥有独立的虚拟内存地址空间和内核数据结构(页表,打开文件表等),当子进程修改了虚拟页之后,会通过写时拷贝创建真正的物理页。线程共享进程的虚拟地址空间和内核数据结构,共享同样的物理页
  2. 多个进程通信只能采用进程间通信的方式,比如信号,管道,而不能直接采用简单的共享内存方式,原因是每个进程维护独立的虚拟内存空间,所以每个进程的变量采用的虚拟地址是不同的。多个线程通信就很简单,直接采用共享内存的方式,因为不同线程共享一个虚拟内存地址空间,变量寻址采用同一个虚拟内存
  3. 进程上下文切换需要切换页表等重量级资源,线程上下文切换只需要切换寄存器等轻量级数据
  4. 进程的用户栈独享栈空间,线程的用户栈共享虚拟内存中的栈空间,没有进程高效
  5. 一个应用程序可以有多个进程,执行多个程序代码,多个线程只能执行一个程序代码,共享进程的代码段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值