JAVA并发编程---上下文切换

    上下文的切换首先要追溯单个处理器的时期,在当时的环境下操作系统就能处理多线程并发任务。Cpu通过给每个线程分配时间片来实现这种机制,线程只能在分配的时间片内执行任务。时间片简单的来说就是Cpu分配给各个线程的执行时间。因为时间片非常短,所以Cpu通过不断的切换线程执行,让我们感觉到多个线程是在同时执行的因为时间片一般都只有几十毫秒所以人类是无法感知到的。
    Cpu通过时间片分配算法来循环执行任务,时间片的长短直接决定了当前线程能占用处理器运行的时长当一个线程的时间片用完了,或者因自身原因被迫暂停运行了,这个时候,另外一个线程(可以是同一个线程或者其它进程的线程)就会被操作系统选中,来占用处理器执行。但是在切换前会保存上一个任务的状态以便下一次切回这个任务时可以继续加载这个任务的状态。具体执行就是在每个任务运行前,CPU都需要知道任务从哪里加载,又是从哪里开始运行,也就是说,需要系统事先帮他设置好CPU寄存器所以任务从保存再到加载的过程就是一次上下文切换。

CPU寄存器概念:
可用来暂存指令,数据等处理对象,可以将其看做是内存的一种。根据种类的不同,一个CPU内部会有20~100个寄存器。使用高级语言编写的程序会在编译后转化成机器语言,然后通过CPU内部的寄存器来处理。不同类型的CPU,其内部寄存器的数量,种类以及寄存器存储的数值范围都是不同的。其中,程序计数器,累加寄存器,标志寄存器,指令寄存器和栈寄存器都只有一个,其他的寄存器一般有多个。根据功能的不同,我们可以将寄存器大致划分为八类。

  • 累加寄存器: 存储执行运算的数据和运算后的数据。

  • 标志寄存器: 存储运算处理后的CPU的状态。

  • 程序计数器: 存储下一条指令所在内存的地址。

  • 基址寄存器: 存储数据内存的起始地址。

  • 变址寄存器: 存储基址寄存器的相对地址。

  • 通用寄存器: 存储任意数据。

  • 指令寄存器: 存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作。

  • 栈寄存器: 存储栈区域的起始地址。

根据任务的不同,CPU的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、线程上下文切换、以及中断上下文切换、地址空间切换(将虚拟内存切换到物理内存)。我们暂时只关心线程和进程的切换。

内核态与用户态:
Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中。CPU特权等级的Ring0 和 Ring3。
在这里插入图片描述

  • 内核空间(Ring 0)具有最高权限,可以直接访问所有资源
  • 用户空间(Ring 3)只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。

线程上下文切换和进程上下文切换一个最主要的区别是 线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。说白了,所谓内核中的任务调用,实际上的调度对象是线程;而进程只是给线程提供了虚拟内存、全局变量等资源。这两种上下文切换的处理都是。通过操作系统内核来完成的,内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。这跟我们通常所说的进程上下文切换是不一样的。

时间消耗:
上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗最大的操作。Linux相比与其他操作系统(包括其他类 Unix 系统)有很多的优点,其中有一项就是,其上下文切换和模式切换的时间消耗非常少。但是过多的上下文切换,会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。

常用减少线程上下文切换方式:
无锁并发编程、CAS算法、使用最少线程避免创建不必要的线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值