绝大部分系统内核函数都会调用SwapContext函数,来实现线程的切换,那么这种切换是线程主动调用的。
如何中断一个正在执行的程序?
- 异常 比如缺页,或者INT N指令
- 中断 比如时钟中断
- Windows系列操作系统: 10-20毫秒
- 如要获取当前的时钟间隔值,可使用Win32API:
GetSystemTimeAdjustment
线程切换的几种情况:
1) 主动调用API函数
2) 时钟中断
3) 异常处理
如果一个线程不调用API,在代码中屏蔽中断(CLI指令),并且不会出现异常,那么当前线程将永久占有CPU,单核占有率
100% 2核就是50%