• 上下文切换


    https://www.cnblogs.com/emperor_zark/archive/2012/12/11/context_switch_1.html

    https://www.cnblogs.com/emperor_zark/archive/2012/12/11/context_switch_2.html

    如果某台计算机只有一个CPU的话,则在某一时刻只有一个线程可以运行。
    Windows必须跟踪记录线程对象,而且不停地跟踪记录每个线程对象。
    Windows必须决定CPU下一个次(每隔约20毫秒)调度那一个线程使其运行。
    上下文切换(Context switch):Windows使CPU停止执行一个线程的代码,而开始执行另一个线程的代码的现象,我们称之为上下文切换。
    上下文切换的开销:
    1.进入内核模式;
    2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。
    注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。
    3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。
    如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。
    4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。
    5.退出内核模式。


    以上节选自《框架设计》,供大家参考。

    关于Windows平台上多线程的理论上就知道这么多,但没有验证,也不知道该怎么去验证。
    Linux平台没深入学习过,各种OS的线程管理应该大同小异吧,《操作系统原理》之类的的书上也有讲过,

  • 相关阅读:
    python笔记目录
    Django 的View(视图)系统
    051_Bootstrap 框架
    050_jQuery 事件
    049_jQuery 操作标签
    048_jQuery
    016-递归函数
    047_BOM_DOM
    046_JS
    045_CSS
  • 原文地址:https://www.cnblogs.com/tcicy/p/10192542.html
Copyright © 2020-2023  润新知