加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c / c中更改Android上的本机线程优先级

发布时间:2020-12-16 05:17:25 所属栏目:百科 来源:网络整理
导读:疯狂地晦涩的pthread api线程优先级不仅是陌生的不可理解,而且它只是在 Android上不起作用. 那么,有没有办法减少或增加线程的优先级? int currentPolicy;struct sched_param sched;status = pthread_getschedparam(pthread_self(),currentPolicy,sched);pri
疯狂地晦涩的pthread api线程优先级不仅是陌生的不可理解,而且它只是在 Android上不起作用.

那么,有没有办法减少或增加线程的优先级?

int currentPolicy;
struct sched_param sched;
status = pthread_getschedparam(pthread_self(),&currentPolicy,&sched);
printf("sched.sched_priority:%d currentPolicy:%d",sched.sched_priority,currentPolicy);
printf("priority min/max:%d/%d",sched_get_priority_min(currentPolicy),sched_get_priority_max(currentPolicy));

输出:

sched.sched_priority:0 currentPolicy:0

priority min/max:0/0

另外,无论我做什么,pthread_setschedparam总是为我返回一个错误(参数无效).
在我的代码中,我需要减少我的处理程序线程的优先级,以确保其他线程使用更多的cpu时间.或者,或者,我可以提高我的其他线程的线程优先级,我想要使用更多的cpu与我的过程中的其他线程相比.

有没有办法让我这样做?我只使用本机c代码.

编辑:从这个帖子看起来像android的线程是一些轻量级的进程和修改优先级为他们setpriority应该使用.它看起来功能正常(前后的getpriority表示优先级被修改).但是,我的应用没有看到预期的效果.

解决方法

Android线程是Linux线程.没什么特别的.

setpriority()改变线程的“nice”值,这会影响线程被调度的优先级.

pthread_setschedparam()也可用于更改策略.

一般而言,如果没有提升的权限(CAP_SYS_NICE),您不能提高优先级或更改其策略.您可以降低它,或将其提高回“正常”优先级.

如果您使用adb shell ps -t -p,您可以看到分配给每个线程的优先级.此信息也包含在Dalvik堆栈中.

Dalvik使用setpriority()临时提高GC线程的优先级,以避免优先级反转.如果你看第625行周围的this bit of code,你可以看到它.您还可以看到set_sched_policy()的调用,这是一个更改线程所在的cgroup的Android库函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读