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的线程管理应该大同小异吧,《操作系统原理》之类的的书上也有讲过,