进程、线程与纤程——操作系统入门(2)

进程、线程与纤程

1. 进程

进程是资源分配的基本单位。

进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。

下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行。


2. 线程

线程是独立调度(执行)的基本单位。

一个进程中可以有多个线程,它们共享进程资源。

QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。

3. 区别(面试题)

Ⅰ 拥有资源

进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源(线程共享进程中的资源)。

Ⅱ 调度

线程是独立调度(执行)的基本单位。

Ⅲ 系统开销

由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。

Ⅳ 通信方面

线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。


纤程

在这里插入图片描述

  • 程序双击可以产生一个进程,一个程序可以有多个进程,一个进程可以有多个线程,一个线程可以包含一个或多个纤程。

1.什么是纤程(协程)?

纤程(Fiber):纤程是更轻量级的线程,线程中的线程,一个线程可以包含一个或多个纤程。纤程是在用户模式下实现的,内核对纤程一无所知。纤程拥有自己的寄存器上下文和栈。

不用和内核打交道所以效率高。


2.为什么和内核打交道效率低?

在这里插入图片描述

3.为什么要有纤程(和线程的比较)?

Java中的任何一个线程(Thread)对应的都是一个操作系统内核级的线程(操作系统所能起的线程数是有限的,资源是很宝贵的) 在Linux上起一个线程大概会消耗1M左右的资源。起一个线程会在用户态和内核态来回切换。

也就是说,线程是重量级的,纤程是轻量级的线程,它消耗小,切换快。在某些特定的情况下,纤程的效率要比线程的效率高很多,一个进程可以创建成千上万个纤程。


4.纤程的应用场景?

纤程一般运用在回调(回调函数)上(用户空间的异步编程)


补充:程序的本质

程序就是指令和数据的集合,通过一定顺序排列的指令和数据,就可以完成特定的工作。
在这里插入图片描述

  • 和线程相关的堆栈也记录了这些信息。
  • 一个CPU同一时间只能执行一个线程,当CPU切换线程的时候,需要把PC中的数据,堆栈中的数据保存在内存中,然后执行另外一个线程。若想重新执行之前的线程,把保存的数据再重新放回。
  • 所谓的线程在执行时,就是寄存器的一堆信息再加上一些堆栈的信息,就能保留这些线程的执行信息。

参考资料:马士兵教育 CyC208

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值