`

CPU的上下文切换

 
阅读更多

在高性能编程时,经常接触到多线程,起初总以为多线程并行执行总比单线程要快,然而实际情况是,多线程之间需要竞争IO设备,或者竞争锁资源,导致往往执行速度比不上单线程,那为什么要用多线程呢?这里稍微讲讲

用多线程有几个好处

1.在多核CPU上使用多线程能提高资源利用率

2.多线程时模块化的编程模型,在单线程中如果在一个耗时较长的任务上卡住,那后面都别动了,这就很尴尬。多线程可以将程序分成几个功能相对独立的模块,单独分配一个线程去处理这个耗时长的任务

3.多线程相对于多进程有几个好处,一个是线程的启动切换相比进程小得多。另一个就是线程之间也可以共享信息,相比之下进程间通信则需要专门的消息传递机制

 

言归正传,多线程经常提及的一个概念就是上下文切换(Context Switch)。它的精确定义可以参考:http://www.linfo.org/context_switch.html 。多任务系统往往需要同时执行多项任务,任务数大于CPU数量时,如何让用户感觉这些任务在同时进行呢?操作系统的设计者利用了时间片轮转的方式,CPU给每个任务一定的时间,时间片时间用完的时候,就把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一个任务。任务的状态保存及再加载,这段过程就叫上下文切换。

 

对于我们经常使用的抢占式操作系统来说,引起上下文切换的原因大概有一下几种:1.当前执行任务的时间片用完,CPU正常调度下一任务2.当前执行任务碰到IO阻塞,调度器挂起此任务,执行下一任务3.多个任务抢夺锁资源,当前任务没抢到,被调度器挂起4.用户代码挂起当前任务5硬件终端。总的来说就是各种原因引起的当前任务的切换

分享到:
评论

相关推荐

    Linux操作系统通过实战理解CPU上下文切换.pdf

    Linux操作系统通过实战理解CPU上下文切换 在Linux操作系统中,CPU上下文切换是指在不同的进程或线程之间切换时,需要保存和恢复进程或线程的状态信息,以便在切换回来时能够继续正确地执行。CPU上下文切换可以分为...

    04经常说的CPU上下文切换是什么意思?1

    CPU 上下文切换是操作系统管理进程执行的关键机制。在 Linux 系统中,当 CPU 需要在不同进程或线程之间切换时,就需要保存当前进程的状态(包括寄存器值、内核栈、虚拟内存映射等),然后加载新进程的状态,这个过程...

    一种任意时间片长度对CPU上下文切换代价影响消除的新方法.pdf

    在现代操作系统中,CPU上下文切换是至关重要的一个环节,它涉及到处理器资源的分配与管理。上下文切换是指当一个进程或线程被暂停执行,而另一个进程或线程获得CPU执行权时,处理器保存当前进程的状态(上下文),...

    CPU上下文切换到底是个什么东西

    1. CPU上下文切换到底是个什么东西 文章目录1. CPU上下文切换到底是个什么东西1.1. CPU上下文1.2. CPU上下文切换1.2.1. 进程上下文切换1.2.2. 线程上下文切换1.2.3. 中断上下文切换 第一节,我们了解到了平均负载是...

    04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)

    vmstat:是查看系统的整体上下文切换情况,想看具体的每一个进程的情况,需要pidstat工具。 如果不知道参数指令的意思,可以通过 man vmstat 查看具体的指令分析。 自愿上下文切换:是指由于系统资源不足,导致的上...

    JAVA线程上下文切换.docx

    上下文切换是操作系统为了实现多任务并发执行而采取的一种策略,即使得在单核CPU上也能处理多个线程。CPU通过为每个线程分配一个时间片来执行代码,当一个线程的时间片用尽或遇到IO阻塞、锁竞争等问题时,系统会保存...

    cpp-轻量级内联分析器用于测量线程的挂起时间cpu时间和premptive上下文切换

    本文将详细探讨“cpp-轻量级内联分析器”这一工具,它专为测量线程的挂起时间、CPU时间和抢占式上下文切换而设计。该工具适用于C++开发环境,并被归类在"开发-其它杂项"标签下,主要应用于监控和分析线程性能。 一...

    linux性能调优.pdf

    上下文切换是系统调度过程中不可避免的操作,包括CPU上下文切换、进程上下文切换、线程上下文切换和中断上下文切换。每次上下文切换都会带来一定的开销,尤其是在高并发环境下,过多的上下文切换可能成为性能瓶颈。...

    OC-多线程-上下文切换

    当我们谈论“OC-多线程-上下文切换”时,我们实际上是在讨论Objective-C中多线程环境下的一个核心概念。上下文切换是操作系统调度线程执行的一种机制,它涉及到保存当前线程的状态并恢复另一个线程的状态,以便线程...

    c语言程序上下文切换和解耦的工具.zip

    在C语言编程中,上下文切换和解耦是两个关键概念,它们对于理解和优化多线程、并发以及异步编程至关重要。在这个“c语言程序上下文切换和解耦的工具.zip”压缩包中,虽然没有具体的文件内容可以参考,但我们可以深入...

    ucosiii 源码分析之上下文切换-针对M3内核分析

    在这种模式下,CPU会关闭不必要的模块,上下文切换时需要特别处理。 通过深入理解这些知识点,开发者可以更好地优化UCOSIII在Cortex-M3上的性能,减少上下文切换的开销,提高系统的实时性和效率。结合《Cortex-M3...

    基于ARM Cortex-M4的MQX调度的上下文切换机制分析.pdf

    当一个高优先级的任务就绪时,或者一个任务的执行时间到了,操作系统都会进行上下文切换,把CPU的控制权交给另一个任务。 MQX操作系统: MQX操作系统是一种专为嵌入式应用设计的RTOS,它具有实时性能卓越、内核精巧...

    java查看哪个进程切换频繁上下文.zip

    上下文切换是操作系统在多任务环境中为了公平分配资源或者响应突发事件而进行的一种操作,它涉及到将CPU的状态从一个进程保存并恢复到另一个进程。频繁的上下文切换可能导致系统性能下降,因为这消耗了大量的CPU时间...

    三层以太网交换机CPU收发包相关问题分析

    频繁的中断请求会导致CPU上下文切换的开销增加。为了优化,可以采用轮询方式减少中断次数,或者精细化中断处理,以减少不必要的CPU时间消耗。 综上所述,三层以太网交换机的CPU收发包问题涉及到负载控制、队列管理...

    深入理解Python 多线程

    利用Python的多线程,只是利用CPU上下文切换的优势,看上去像是并发,其实只是个单线程,所以说他是假的单线程。 那么什么时候用多线程呢? 首先要知道: io操作不占用CPU 计算操作占CPU,像2+5=5 Python的多线程...

    对Linux内核中进程上下文和中断上下文的理解

    - **进程上下文切换**: - 当一个进程通过系统调用进入内核空间时,内核需要保存该进程的上下文,并切换到内核空间执行相应的服务。 - 系统调用完成后,内核将恢复之前的进程上下文,使进程继续执行。 #### 三、...

    Linux 内核进程上下文和中断上下文

    这一过程涉及到了从用户空间到内核空间的上下文切换,包括保存用户空间的寄存器状态、变量等,并设置好内核空间的执行环境。 当系统调用完成后,内核会再次进行上下文切换,恢复用户空间应用程序的状态,使其能够从...

Global site tag (gtag.js) - Google Analytics