请问Windows线程间的转换时间到底是多少

firstary 2005-10-23 04:25:31
Windows核心编程上说每20ms操作系统切换一次线程.
我做了个测试,在一个基于对话框的程序里运行两个线程,每个线程中100次循环用QueryPerformanceCounter查询当时时刻并转换成时间显示在一个Console中,从结果可以看到线程的来回切换,但是每个线程只运行了1~2ms啊,我的CPU是P4 2.4GHz的
请问这是为什么
...全文
1444 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Featured 2005-10-31
  • 打赏
  • 举报
回复
《编程高手箴言》中这样解释:
Windows 95线程调度使用的是这样的一种算法,即把大部分时间给那些急需的线程。CPU时间间隔用硬件时钟中断,操作系统内部计时器中断处理调度决定另一个程序是否需要运行,如果运行,则切换到另一个线程上。Windows 95的时间片是20毫秒,也就是说,一秒钟内,理论上可在50个线程之间进行强制切换,但如果所有的线程都主动放弃CPU或等待系统,则切换的频率就会很高,每秒切换4、5千次也不奇怪。
ChenLiuqing 2005-10-31
  • 打赏
  • 举报
回复
mark
meishi 2005-10-31
  • 打赏
  • 举报
回复
线程主动请求释放CPU时,以及当有更高优先级的线程创建且处于就序状态时,这两种情况切换的时间可以认为是0,因为此时线程以及切换,绝大部分是这两种情况。
当局有相同优先级的线程同时处于就绪状态时,此时线成的切换时间据说是17ms,这种情况出现的好。
zhxk 2005-10-27
  • 打赏
  • 举报
回复
是的,支持:)

DoItFreely 2005-10-26
  • 打赏
  • 举报
回复
一个线程阻塞会立即导致任务切换(或者说线程调度),所以这种情况下调度的间隔不是20ms,而是立即 - 如果当时没有其他繁重的运算
gohappy_1999 2005-10-24
  • 打赏
  • 举报
回复
mark
skykeen 2005-10-24
  • 打赏
  • 举报
回复
MARK
qrlvls 2005-10-24
  • 打赏
  • 举报
回复
上下文交换的时间是极短的,系统时间分片大概是 20ms 或 10ms 左右
线程一次运行了多长时间与时间片的长度并没有太大关系,这还与当前系统中其他进程的状况有关,因为 windows 是可抢占优先级的系统,因此时间片在这个问题上不能说明问题
pomelowu 2005-10-23
  • 打赏
  • 举报
回复
100ns左右吧
oyljerry 2005-10-23
  • 打赏
  • 举报
回复
QueryPerformanceCounter跟你的cpu等有关,一般精度可以达到us
lianglp 2005-10-23
  • 打赏
  • 举报
回复
20ms
每个线程一次运行的时间片最大是这个值左右,
但如果在这之内,你的线程处理空闲状态的话,操作系统会自动
切换到需要运行的线程去,所以你看到的才会有这个情况。

因为一般来说,系统的CPU时间都是处于空闲状态的,因为CPU处理的
速度太快了,你可以把线程的优先级调高点,运行一个死循环,保存
你的机器像挂掉一样。
firstary 2005-10-23
  • 打赏
  • 举报
回复
另外,QueryPerformanceCounter的精度是多少啊

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧