android上层应用读取节点丢包问题汇总

最近在搞上层service读取设备节点,设备节点每隔7.5ms更新一次数据,

发现使用java直接读,获取数据会丢包严重, 而且读取数据的间隔不均匀

优化的策略如下:

1.提升线程的优先级,使用android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);发现有点效果,但效果不大

2.果断使用jni进行读取,发现读取改善很大,均匀程度显度提升。c语言的read还是比java语言效率高

3.在系统负载较高时发现,还是存在丢包现象,猜测在jni native调用时,read阻塞状态下,线程挂起,cpu调度策略导致read阻塞时间长

4.果断使用poll 进行优化,poll可以设置阻塞时长,设备节点每隔7.5ms更新数据,poll阻塞时长发现设置到12ms有很大提升


//readfds中有文件句柄, 阻塞时长设置12ms

ready = poll(&readfds, 1,12);
if (ready) {
// read node data
res = readfd, buf, BUFFER_SIZE);
if (res < 0) {
ALOGE("READERR, res:%d\n", res);
return 0;
}

使用poll后发现cpu占有率会高1到2个点,即原来占有率在%2或%3,使用poll后cpu占有率会在3%或4%或5%


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值