客户端卡死和系统卡慢(Windows线程调度)

Windows客户端中有时候会出现界面操作卡死,卡慢的问题,大多数情况是因为当前进程的主线程,即UI线程太繁忙,不能及时响应用户的操作。这种情况下,需要定位繁忙的逻辑所在,给主线程减压。给主线程减压的方法可以增加工作线程,将繁忙的任务抛给工作线程来做,结果交给主线程去做刷新。最近在做IM,遇到一个情况,网络上抛过来的消息量太大,可能一秒钟就有上千条数据,主线程根本来不及绘制,即便主线程只是绘制,这个线程也已经达到了100%。所以根本无暇处理用户操作。对于这种情况,需要增加缓存,将消息缓存下来,再以一定的速率交给主线程绘制,保证主线程可以及时响应用户操作。这里因为消耗的慢,缓存的快,会涉及到缓存大小和丢弃的策略。如果缓存量实在大,可以考虑本地缓存,sqlite或者本地文件作为中转存储。

系统卡顿,当系统中的繁忙的线程数等于CPU的核心数时系统就会有卡顿,因为这些线程每一个都会消耗足额的时间片。但是系统这个时候不会完全卡死,这是因为操作系统的调度策略,不会让一个线程完全占据CPU,会以优先级和时间片为纬度调度其他线程。假设CPU有12个核心,这时候起一个进程开启12个死循环线程,模拟线程繁忙的状态那么总的CPU利用率就已经是100%了。但是系统中的其他线程还会被调度,不过整个系统就会开始卡慢,因为其他线程被调度的间隔变大。繁忙等待的线程越多,这个线程越明显,如果是1000个死循环线程,那么系统就会整个卡住。假设一个线程的时间片是20ms,那么任何一个线程需要等待的时间就是1000*20ms = 20s。这个系统就无法响应了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值