前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JUC多线程02--什么是上下文切换

JUC多线程02--什么是上下文切换

作者头像
潇洒
发布2023-10-20 10:08:20
1060
发布2023-10-20 10:08:20
举报
文章被收录于专栏:石头岛

上下文切换

即,不同线程之间的切换。 是存储和恢愎CPU 状态的过程,它使得线程执行能够从中断恢愎执行。 上下文切换是需要开销的。

线程切换只在多核 CPU 中才有

并不是,线程切换是CPU的功能,单核 CPU 也可以进行上下文切换。 CPU 执行线程的粒度是通过给分个线程分配时间切片来实现的。在单核时代,一个系统也会开很多程序,每个程序都会等待CPU来执行并不会等会某一个线程执行完毕。 比如单核时代玩 CS,可以边玩游戏边听千千静听。

CPU 通过切换时间分片来执行任务,切换前都会保存上一次任务的状态,这样下次再切回来的时候,可以继续执行当前这个状态。 这种保存再切换回来的操作,就是一次上下文切换

查看上下文切换

在linux下,使用vmstat 进行查看:

执行:

代码语言:javascript
复制
vmstat 10 10

查看一下结果:

代码语言:javascript
复制
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
16  0      0 221468  41628 19576852    0    0   328   145    0    0  1  0 99  0  0
 0  2      0 222260  41748 19564900    0    0 292478 15765 14014 14467  5  1 84 10  0
 1  1      0 266040  41764 19512824    0    0 289173 18031 16546 11848  7  1 83  9  0
 3  0      0 230408  41636 19525744    0    0 293228 13974 16831 12866  6  1 83 10  0
 0  1      0 235068  41636 19497308    0    0 289227 17846 17284 13136  6  1 83 10  0
 0  2      0 247768  41536 19484392    0    0 297066 10654 16103 12549  3  1 85 11  0
 1  3      0 222212  41776 19476168    0    0 285245 22050 17815 13645  5  1 83 11  0
 0  1      0 225332  41584 19473580    0    0 295298 11009 15639 15600  3  1 82 15  0
 0  8      0 221040  40884 19477252    0    0 304033  5120 13754 13055  2  1 86 12  0
 1  1      0 227988  40440 19432700    0    0 296429  9154 15598 16809  4  1 82 13  0

如何减少上下文切换

既然上下文切换会导致额外的开销,因此减少上下文切换次数便可以提高多线程程序的运行效率。

减少上下文切换的方法有:

  1. 无锁并发编程
  2. CAS算法
  3. 使用最少线程和使用协程
  4. 协程,go 当中使用
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上下文切换
    • 线程切换只在多核 CPU 中才有
      • 查看上下文切换
        • 如何减少上下文切换
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档