» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 30 12
发新话题
打印

[数码手机] 我来科普一下:通知和轮询的区别

我还是单独开一贴吧,免得再哪贴里面光喷去了。。。
通知实现的方法,按我的理解和linux下很多程序实现的方法如下:
程序再起socket的时候,设定socket为柱塞的方式,也就是说socket监听端口的时候,如果没有数据,监听进程就是挂起休眠起来,实际上,这个时候程序已经休眠,不占用cpu资源,也就谈不上费电,当基带从空口获取到一个数据片的时候, 底层会触发一个中断给cpu,cpu判断这个中断类型,如果是ip包,cpu会吧数据传给tcp/ip协议栈,协议栈根据socket注册情况,唤醒相应的程序,这个时候就可以切换到真正处理的app里面去了,这样实现起来省电,高效,但是ios悲催的内存大小和进程调度方式,可能会导致休眠的程序丢失一部分进程资源,导致切换会app的时候,可能还需要重新登陆==一系列动作,这样造成用户体验不好,但是我觉得这个机制是非常适合手持设备的,希望将来ios能解决进程切换的问题。这就是为什么有个兄弟说一个ios设备给另外一个ios设备发消息,可能再1秒以内能收到的原因。因为全部都是主动触发的方式,相当于多米诺骨牌一样,自然速度会很快

所谓轮询的方式,
哪就是很多现在pc和android上实现的方法,注册socket为非柱塞的方式,也就是说socket监听端口的时候,如果没有数据,监听进程就会放过这次监听,使用timer/sleep 固定时间,然后到一个门限的时候,比如说1秒/30秒的时候,主动向server发送查询的数据包,server查询结果,然后返回给设备,设备就知道这个查询时间片内有没有本程序的数据,这样实现起来费电,复杂,但是由于android使用linux进程调度算法,最终结果看起来也是可以接受的。

以上2中方式差别,再linux和xp下面使用ping就可以看到差别,linux ping包的延时可能再1ms级别,xp就是10ms级别,延时差的很远。性能也差不少,至于android为什么不使用push通知+完善的后台调度,我只能说这是历史原因造成的,以前android就是个野孩子,没有通知服务器这种数据中心,直接蛮干就ok了。导致出现现在各种费电的程序跑再后台。


TOP

飞行模式、不开第三方后台的原生Android也很耗电是怎么回事?它在轮询什么?电量统计?

[ 本帖最后由 burnfox 于 2011-6-23 21:01 编辑 ]



TOP

posted by wap, platform: Chrome

Android是轮询和推送并存,官方的是推送,第三方的是轮询


TOP

posted by wap, platform: Chrome

不用瞎猜了,我给出Google日历和联系人的同步时序图吧:

TOP

posted by wap, platform: Chrome

具体这里有:http://mysuperbaby.iteye.com/blog/902054

TOP

我觉得 这个帖子里2楼完全是多余的
当然大家看完我这句话也可以把我这楼忽略
本帖最近评分记录
  • wgwg12345 激骚 +1 违规内容 2011-6-24 16:03

TOP

引用:
原帖由 jun4rui 于 2011-6-23 20:51 发表
posted by wap, platform: Chrome

具体这里有:http://mysuperbaby.iteye.com/blog/902054
这个只是消息流程图,不是具体实现机制上的讨论

TOP

引用:
原帖由 jun4rui 于 2011-6-23 20:49 发表
posted by wap, platform: Chrome

不用瞎猜了,我给出Google日历和联系人的同步时序图吧:

还有,我相信google自己的消息都是push机制的。而且应该实现的很好。

TOP

引用:
原帖由 burnfox 于 2011-6-23 20:33 发表
飞行模式、不开第三方后台的原生Android也很耗电是怎么回事?它在轮询什么?电量统计?
不至于吧,飞行不开第三放后台程序一个晚上能耗多少电?能超过10%么?

TOP

posted by wap, platform: Chrome

你可以看时序图的发起方,显然有变动后,是服务器主动发起的。

而且里面说了:

Google Sync是通过Atom Feed协议进行的. 这样当Server端有changes后, 会通过C2DM框架发送"com.google.android.c2dm.intent.RECEIVE" action给SubscribedFeedsBroadcastReceiver,  而SubscribedFeedsBroadcastReceiver在onReceive()方法启动SubscribedFeedsIntentService.

是服务器发生变动后,通过C2DM发送消息到接收方的。

TOP

引用:
原帖由 潜水艇的水 于 2011-6-23 21:09 发表

不至于吧,飞行不开第三放后台程序一个晚上能耗多少电?能超过10%么?
7个小时11%,未root

在tompda老卖家那买的,以前也买过好多次了,没问题,电池连个触点划痕都没有,所以相信是原装电池。

TOP

LZ我就请教1个问题:
IOS5敢于把维特+IM+云端大量数据同步集成到系统内核里,是否代表苹果自家PUSH服务器+系统推送部分的可靠性足够应付QQ之类信息及时准确传递?

TOP

实在受不了,这个破东西都能折腾这么久,而且都没有说到点子上~
其实轮询还是通知这东西根本就没啥差别,去到最底层肯定还是轮询机制,只不过底层轮询速度超快,去到应用层可以看成是无缝的事件触发机制的而已~
ios和andorid真正的区别在于ios的推送协议是死的,任何第三方厂商的推送内容只能由系统统一来显示,因此内容和格式都是基本固定的,功能能较弱,但是优点是安全性和省电!
andorid这方面是开放的,厂商可以选择驻留自己的应用程序,用自己的应用接收和渲染推送协议内容~所以展现的内容和功能可以强大很多很多!
本帖最近评分记录
  • jun4rui 激骚 +1 最骚 Rated by wap 2011-6-23 21:21

TOP

posted by wap, platform: SAMSUNG (Nexus S)

阻塞和非阻塞不是程序代码可以控制的么。

TOP

引用:
原帖由 burnfox 于 2011-6-23 21:14 发表


7个小时11%,未root

在tompda老卖家那买的,以前也买过好多次了,没问题,电池连个触点划痕都没有,所以相信是原装电池。
这叫做物似主人形!

TOP

 30 12
发新话题
     
官方公众号及微博