七、线程调度优先级和关联性

1. 线程切换 -->  上下文切换

2. 抢占式调度,很多线程无法调度。因为他们都在等待某种事情发生 p166

3. 挂起和恢复  suspendThread 挂起  ResumeThread 恢复

    对挂起进行计数,例如一个线程被挂起三次,则需要回复三次才能被调度。

     在实际开发中,使用suspendThread要小心,若挂起一个正在堆中分配内存的线程,会导致其它线程不能访问堆。

    确切知道目标线程在做什么,且采取措施避免挂起造成死锁等问题,才可挂起

    一个线程可以挂起自身,但无法恢复自身

4. 进程挂起和恢复

   系统从来不会给进程调度cpu时间,故不存在进程挂起和恢复概念。在这里特质,挂起一个进程中的所有线程   p168

   快照  id   引用计数加1

5. 睡眠, 线程告诉系统, 在一段时间内不需要调度了。 sleep。 睡眠的市场并不准。Sleep(100)。可能睡眠100ms,也可能睡眠几分钟,根据系统运行当前情况而定。sleep(0)表示放弃时间片的剩余时间。

6. 在windows定义的所有数据结构中,context结构是唯一一个特定cpu的。

7. 线程优先级0-31  31最高。 可抢占式(高优先级线程会暂停低优先级线程,而使自己得到运行时间片)

8. 进程优先级 + 线程优先级 = 线程优先级值

   动态优先级: 当线程接收消息等时, 系统可能临时提高其优先级,以及可能对饥饿线程动态提升。

9. 调度io请求优先级

  如果一个优先级线程获得cpu时间,可以轻易将大量io请求入列。因为io请求都需要时间处理。低优先级线程会挂起高优先级线程(io),使它们无法完成任务。(磁盘扫描,杀毒等时候系统响应很慢就是这个原因)

 故而,windows vista 开始,线程可以在进程io请求时设置优先级。系统不允许线程改变另一个线程的优先级。 

  p196 应尽量减少normal 和后台优先级线程之间使用共享同步对象,以避免normal优先级线程因为后台优先级线程拥有锁而被阻塞,导致线程逆转。

10. 关联性

线程运行在那些cpu上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值