首页 > 其他分享 >并发多线程学习(二)上下文切换

并发多线程学习(二)上下文切换

时间:2023-02-27 20:59:32浏览次数:37  
标签:上下文 并发 线程 切换 寄存器 多线程 CPU

上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程(或线程)切换到另一个进程(或线程)。上下文是指某一时间点 CPU 寄存器和程序计数器的内容。

寄存器是cpu内部的少量的速度很快的闪存,通常存储和访问计算过程的中间值提高计算机程序的运行速度。

程序计数器是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体实现依赖于特定的系统。

举例说明 线程A - B

1.先挂起线程A,将其在cpu中的状态保存在内存中。

2.在内存中检索下一个线程B的上下文并将其在 CPU 的寄存器中恢复,执行B线程。

3.当B执行完,根据程序计数器中指向的位置恢复线程A。

CPU通过为每个线程分配CPU时间片来实现多线程机制。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。

但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。

上下文切换通常是计算密集型的,意味着此操作会消耗大量的 CPU 时间,故线程也不是越多越好。如何减少系统中上下文切换次数,是提升多线程性能的一个重点课题。

标签:上下文,并发,线程,切换,寄存器,多线程,CPU
From: https://www.cnblogs.com/zhe2015/p/17161841.html

相关文章

  • 并发多线程学习(三)Java多线程入门类和接口
    1Thread类和Runnable接口上一章我们了解了操作系统中多线程的基本概念。那么在Java中,我们是如何使用多线程的呢?首先,我们需要有一个“线程”类。JDK提供了Thread类和Runn......
  • 并发多线程学习(五)Java线程的状态及主要转化方法
    1操作系统中的线程状态转换首先我们来看看操作系统中的线程状态转换。在现在的操作系统中,线程是被视为轻量级进程的,所以操作系统线程的状态其实和操作系统进程的状态是......
  • 并发多线程学习(四)线程组和线程优先级
    1线程组(ThreadGroup)Java中用ThreadGroup来表示线程组,我们可以使用线程组对线程进行批量控制。ThreadGroup和Thread的关系就如同他们的字面意思一样简单粗暴,每个Thread......
  • 并发多线程学习(六)Java线程间的通信
    合理的使用Java多线程可以更好地利用服务器资源。一般来讲,线程内部有自己私有的线程上下文,互不干扰。但是当我们需要多个线程之间相互协作的时候,就需要我们掌握Java线程的......
  • JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO
    代码段概念一个script就是一个代码段在一个页面中可以有多个代码段每一个代码段,彼此独立的,如果上面的代码段报错了,不会影响下一个代码段referenceError引用错......
  • JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO
    代码段概念一个script就是一个代码段在一个页面中可以有多个代码段每一个代码段,彼此独立的,如果上面的代码段报错了,不会影响下一个代码段referenceError引用错......
  • Redis 缓存穿透,击穿,雪崩 并发 之 读写数据编码实战
     什么是缓存穿透  缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。当用户使用这条不存在的数据疯狂......
  • 并发专题一
    前言​经常在网上看到一些博客,介绍高并发。由于我们在实际开发过程遇到高并发的场景非常少,一直觉得很高大上,那我们通过CPU,操作系统,和JDK等方面揭开高并发的''神......
  • 项目中并发修改可能存在的问题
    最近做的一个功能和同事做的工作存在交集,他做的主要是写一张表的增、删、改、查的功能,自己主要负责的是数据同步功能,从以前的旧系统同步数据到新系统中。自己在写代码......
  • 7_多线程编程
    多线程线程简介多任务:边吃饭边玩手机、开车打电话。(看起来是多个任务都在做,其实本质上大脑在同一时间依旧只做了一件事情)。多线程:开黑。进程:在操作系统中运行的程序就......