• 多线程的上下文切换


    多线程的上下文切换是指在多线程环境下,操作系统或调度器将 CPU 执行权从一个线程切换到另一个线程的过程。上下文切换允许多个线程交替执行,使得看起来多个线程同时在运行,从而实现并发性。上下文切换的发生通常有以下几种情况:

    1. 时间片耗尽:操作系统为每个线程分配一定的时间片(或时间量),当一个线程的时间片用尽时,操作系统会暂停该线程的执行,并将 CPU 执行权切换到另一个就绪状态的线程,以便继续执行。这是最常见的上下文切换情况。

    2. 等待阻塞:当一个线程在等待某个事件发生(如 I/O 操作完成、锁释放等)时,它会被阻塞,此时操作系统会切换到另一个就绪状态的线程执行。一旦等待的事件发生,被阻塞的线程会重新变为就绪状态,等待调度器分配时间片。

    3. 主动让出 CPU:有些线程可能会主动让出 CPU 的执行权,通过调用像 yield() 方法或 sleep() 方法等方式来实现。这会告诉操作系统可以将 CPU 执行权切换给其他线程。

    4. 线程优先级:操作系统可以基于线程的优先级来决定上下文切换。高优先级的线程可能更频繁地获得 CPU 执行权,低优先级的线程可能需要等待。

    5. 硬件中断:硬件中断(如时钟中断)也可能导致上下文切换,因为操作系统需要在中断处理程序中保存当前线程的上下文,并在中断处理完成后恢复线程的执行。

    上下文切换是一种开销较大的操作,因为在切换时需要保存当前线程的状态(寄存器值、程序计数器等)并加载新线程的状态。因此,过多的上下文切换会降低系统性能。在多线程编程中,需要注意减少不必要的上下文切换,优化线程的调度和并发控制,以提高程序的效率。

    总之:CPU通过时间⽚分配算法来循环执⾏任务,当前任务执⾏⼀个时间⽚后会切换到下⼀个任务。但是,在切换前会保存上⼀个任务的状态,以便下次切换回这个任务时,可以再次加载这个任务的状态。

  • 相关阅读:
    C++ | Leetcode C++题解之第191题位1的个数
    Python学习笔记第四十三天(NumPy 数学函数)
    时间序列分析中的自相关
    GiliSoft USB Lock v10.5.0 电脑USB设备管控软件
    使用 Docker Compose 快速搭建监控网站 uptime-kuma
    ruoyi框架修改左侧菜单样式
    Boom 3D全新2022版音频增强应用程序App
    springboot的基本配置
    C Primer Plus(6) 中文版 第10章 数组和指针 10.7 指针和多维数组
    阿里巴巴Java开发编程规约(整理详细版)
  • 原文地址:https://blog.csdn.net/qq_43116031/article/details/132939235