WinCE 5 kernel thread priority真的很厉害

本文通过分析一个Windows Mobile 6线程实例,揭示了高优先级线程如何导致系统性能严重下降,甚至出现类似死机的情况。线程在设置高优先级后,持续消耗CPU资源,阻碍其他任务执行,强调了程序员应谨慎处理高优先级线程,避免对系统造成负面影响。
rel="File-List" href="file:///C:/DOCUME~1/visual.wei/LOCALS~1/Temp/msohtml1/01/clip_filelist.xml" />

下面是一个Windows Mobile6上的一个线程的实现体。

我要提醒一下

1.       WinCE kernelmulti-task环境

2.       这个线程的实现看起来没什么特别

结论

这样一个thread直接会导致这个mobile系统无法正常使用,power button失效,keypad无法使用。

再次引导你误判

WinCE kernelmulti-task环境!一个thread不可能导致整个系统完蛋!对呀!你看仔细了么?看仔细了!这个线程没干什么呀?!

分析

虽然WinCE kernelmulti-task环境,但是task也是要被调度才能拿到执行权的。一个thread被剥夺执行权只有两个时机。

1.       操作系统 timer interrupt或者其他的中断

2.       这个threadsystem call放弃执行权。包括WaitforSingleObject,Sleep这样的等待API

那么回头看上面的代码,

1.       thread先设置自己的优先级在一个非常高的级别152(power managerthread也只有249)

2.       这个threadfor循环只是在大量消耗系统资源,几乎没给系统喘息的机会,因为他根本不去休息。

综上

这样的高优先级,疯狂占用CPU资源的thread在整个系统中危害是极大的。在这个thread陷入到它的for循环中后,这个系统表现出来的是停止响应,基本上是死机(但实际是并没有死)。

我这里不停的for只是一个模拟,类似的代码有多种表现形式,你自己可以想象。

我的目的不是让你只在这里看热闹,而是从这个例子我们可以知道thread虽然运行在multi-task环境,似乎不会影响其他人,可是事实是他确实会影响,而且非常影响。

结论

因此,如果你决定让自己的thread以很高的优先级运行,那么你一定要对自己的代码负责任,尽量不要让自己影响到别人,这是每个合格的程序员都应该去思考的东西。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值