Windows、手机系统的多任务设计

来源: flywhc 2011-05-26 15:38:08 [] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 次 (2420 bytes)
本文内容已被 [ flywhc ] 在 2011-05-26 17:10:26 编辑过。如有问题,请报告版主或论坛管理删除.

其他手机操作系统的多任务设计其实我不是很了解,但据我了解大概是这样:

symbian多数API都是异步的,用个变量激活activeobject的方式,后台优先级低,前台优先级高,但不管怎样后台都有机会一直运行下去。因此造成写的不好的程序一直运行导致CPU不能进入待机状态。

Windows Mobile是用消息机制,其实内部用的event的方式,当消息队列无消息时可以idle,但也可不idle一直循环下去。因此写的不好的程序耗电更大一些。同样OS一般不会剥夺后台程序运行的机会

以上两种系统在CPU已经进入待机时,没有事件的时候所有线程都休息,有硬件消息到达时只有响应消息的线程会短暂运行,然后挂起,除非那个线程彻底唤醒CPU。设计不好的程序会一直让手机在唤醒状态,虽然屏幕黑的,但CPU和其他硬件一直运作。

android我不了解,应该也差不多吧。

 

IOS里,对于第三方应用程序是前台可以运行,后台不许运行。但苹果自己的程序却可以在后台运行。后来开发了后台的接口,可以在某些事件时运行有限的时间,例如网络收音机播放缓冲区空了要下载,或者程序关闭时给几秒保存数据,VoIP电话等等,都是限制应用,限制时间。这样即使程序没写好也不会浪费太多电。

 

此外,传统的推送(push)服务是一个手机客户端对应一个服务器,每个服务至少都要保持一个连接,每隔一段时间要唤醒系统发送一个heartbeat信号给服务器保持连接。如果有许多许多推送服务,就造成要维护大量连接,系统不断被唤醒,发一大堆heartbeat,浪费电池和网络流量,要知道对于3G发射机当数据发送后要保持一段的高功率再降低功率,如果反复发很小的数据包会使手机一直在高功率状态。IOS对于推送的应用采用统一的PUSH服务器,只需要操作系统维护一个socket连接就好了,大概每15分钟才发一次heartbeat。而且当推送事件到达时,所请求的程序并未运行,需要用户主动点击才能运行,例如收到邮件,不点查看按钮是不运行邮件程序的,这样防止了后台程序通过这种方式主动跑到前台来浪费电。

 

其实我要说的是新出的Windows Phone 7.1 Mango。它跟IOS差不多,也是不许第三方程序在后台运行。为了某种应用,例如多媒体播放、插着充电器的时候用WIFI下载(不插电用3G都不许下载)等等,也可以临时在后台运行。还有同样的PUSH服务机制,微软PUSH服务器也是免费的,随便一个IIS服务器即可轻松写好PUSH脚本。后台程序的问题不仅仅是耗电,还会影响前台程序的效率,这仅仅靠线程优先级是不够的。在WP里特别保证前台程序有90%的耗用以及90MB的内存;而后台总共最多只有那10%的CPU,每个程序可以有3MB内存,多媒体程序因为要解码可以多一点,5MB内存,内存用超了OS会杀掉进程,美名曰主动防止内存泄露……开发者肯定说这太限制自由了,可是这是保障用户体验的设计,因此WP手机有如此流畅的操作,不管装了多少程序,都不怕玩游戏的时候卡,甚至优于IPHONE。

所有跟帖: 

标题应该是windows phone手机系统的多任务设计 -flywhc- 给 flywhc 发送悄悄话 flywhc 的博客首页 (0 bytes) () 05/26/2011 postreply 15:38:39

任务切换时是不是会有cache polution - cache搞脏了必须更新dram,这样耗电大 -?ttу- 给 ?ttу 发送悄悄话 ?ttу 的博客首页 (220 bytes) () 05/26/2011 postreply 15:45:21

很多wifi router用linux要4MB闪存, 用商业RTOS只要2MB就够了,所以 -?ttу- 给 ?ttу 发送悄悄话 ?ttу 的博客首页 (24 bytes) () 05/26/2011 postreply 15:49:08

你是说context switch的时候paging问题吧? -flywhc- 给 flywhc 发送悄悄话 flywhc 的博客首页 (1318 bytes) () 05/26/2011 postreply 16:24:06

据说以前他们是自己写的,后来不灵,乖乖买的相关code -?ttу- 给 ?ttу 发送悄悄话 ?ttу 的博客首页 (0 bytes) () 05/26/2011 postreply 17:30:49

到后台杀死很多事情不能做,好比im - android的内存不够才杀死导致不少 -?ttу- 给 ?ttу 发送悄悄话 ?ttу 的博客首页 (131 bytes) () 05/27/2011 postreply 04:33:45

要理解在iOS和WP下IM软件的实现机制 -flywhc- 给 flywhc 发送悄悄话 flywhc 的博客首页 (767 bytes) () 05/27/2011 postreply 04:49:23

最好的推送是通过SMS,可惜SMS是供应商的摇钱树 -fitwxc- 给 fitwxc 发送悄悄话 fitwxc 的博客首页 (369 bytes) () 05/26/2011 postreply 22:01:11

VOIP也是用的TCP/IP吧?用的SIP/WAP网关?SMS可不是最好的 -flywhc- 给 flywhc 发送悄悄话 flywhc 的博客首页 (981 bytes) () 05/27/2011 postreply 05:12:58

请您先登陆,再发跟帖!

发现Adblock插件

如要继续浏览
请支持本站 请务必在本站关闭/移除任何Adblock

关闭Adblock后 请点击

请参考如何关闭Adblock/Adblock plus

安装Adblock plus用户请点击浏览器图标
选择“Disable on www.wenxuecity.com”

安装Adblock用户请点击图标
选择“don't run on pages on this domain”