Android通过setaffinity实现绑核
有时候为了降低App算力占用,会把关键的线程绑定到大核中,下面介绍一种绑核的方式
查看绑核
-
查看pid
:/ # ps -A | grep test u0_a15 25178 405 15950272 176544 do_epoll_wait 0 S com.test.jnites -
查看线程号
top -H -p 25178 25224 u0_a15 20 0 15G 172M 82M R 83.3 1.6 4:17.53 JNI_Test com.test.jnitest 25229 u0_a15 10 -10 15G 172M 82M S 0.0 1.6 0:00.00 AdrenoOsLib com.test.jnitest 25221 u0_a15 10 -10 15G 172M 82M S 0.0 1.6 0:00.03 RenderThread com.test.jnitest可以获取到JNI_Test线程号25224
-
查看绑核情况
:/ # taskset -p 30692 pid 30692's current affinity mask: ff结果显示为 FF,则表示当前进程已绑定到所有的可用核心。这是因为在 taskset 命令中,每个核心使用一个位来表示,1 表示该核心被绑定,0 表示未被绑定。因此,FF 的二进制表示为 11111111,表示所有的核心都被绑定。
绑核
通过 Java 代码调用 sched_setaffinity 函数来实现线程或进程的核心绑定。需要注意的是,在 Java 中并没有直接暴露 sched_setaffinity 函数,需要使用 JNI(Java Native Interface)来调用 C/C++ 代码中的相应函数。
以下是一个简单的示例,展示了如何使用 JNI 和 sched_setaffinity 函数来将当前线程与指定的 CPU 核心绑定。首先在 C/C++ 代码中实现核心绑定函数,然后在 Java 代码中调用该函数:
-
JAVA
class TestLib {companion object{init {System.loadLibrary("jnitest")}}external fun setAffinity(core_id: Int): Int} -
C++
#include <jni.h>#include <string>#include <thread>#include <sched.h>#include <unistd.h>extern "C"JNIEXPORT jint JNICALLJava_com_test_jnitest_TestLib_setAffinity(JNIEnv *env, jobject thiz, jint core_id) {cpu_set_t cpuset;CPU_ZERO(&cpuset);CPU_SET(core_id, &cpuset);pid_t pid = getpid();if (sched_setaffinity(pid, sizeof(cpu_set_t), &cpuset) == -1) {return -1; // 设置失败}return 0; // 设置成功} -
测试调用
var testThread = Thread{var ret = testLib.setAffinity(3)Log.i(TAG,"ret = ${ret}")while (true){}}testThread.name = "JNI_Test"testThread.start()运行后查看
:/ # taskset -p 8599pid 8599's current affinity mask: 8发现主线程绑定到了第三个核上,8是0000 1000,如果要是绑定子线程的话需要修改sched_setaffinity第一个参数改为0,再运行后
:/ # ps -A | grep testu0_a15 10010 405 15939516 143716 do_epoll_wait 0 S com.test.jnitest:/ # taskset -p 10010pid 10010's current affinity mask: ff:/ # taskset -p 10040pid 10040's current affinity mask: 8子线程成功绑定到了第三个核
相关文章:
Android通过setaffinity实现绑核
有时候为了降低App算力占用,会把关键的线程绑定到大核中,下面介绍一种绑核的方式 查看绑核 查看pid :/ # ps -A | grep test u0_a15 25178 405 15950272 176544 do_epoll_wait 0 S com.test.jnites查看线程号 top -H -p 25178 25224 u0_…...
stm32的位带操作
在51单片机中,我们可以使用P2^1来对单片机的某一位进行操作,到了stm32,我们通过位带操作,将寄存器的每一位映射到一个32位的地址。如下是我查资料摘录的一些图片。 映射方式 SRAM: AliasAddr 0x22000000 (A-0X20000000)*8*4n*4…...
Java 电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…...
https协议经过SpringMVC重定向之后变成http协议
之前项目的协议还是http,当改为https之后,就出现了这个问题。 服务访问地址:https://wuxinke.demo.com 访问某个页面的地址:https://wuxinke.demo.com/aps/judgeProviderOrCtenant.ht 经SpringMVC重定向之后,地址变…...
iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合
效果图 需求,由于视图层级的原因,需要对图片分开进行磨砂, 然后组合在一起 如图,上下两部分,上下两个UIImageVIew大小相同,都是和图片同样的大小,只是上面的UIimageVIew 只展示上半部份 &#…...
与面试官互动:建立积极的技术讨论氛围
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
计算机竞赛 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习
文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 🔥 优质竞赛项目系列…...
完美解决Ubuntu网络故障,连接异常,IP地址一直显示127.0.0.1
终端输入ifconfig显示虚拟机IP地址为127.0.0.1,具体输出内容如下: wxyubuntu:~$ ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen …...
手机无人直播软件有哪些,又有哪些优势?
如今,随着智能手机的普及和移动互联网的发展,手机无人直播成为了一个炙手可热的领域。手机无人直播软件为用户提供了便捷、灵活的直播方式,让更多商家人能够实现自己的直播带货的梦想。接下来,我们将探讨手机无人直播软件有哪些&a…...
解密算法与数据结构面试:程序员如何应对挑战
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
分布式事务7种(秒懂-2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通)
参考文章: 七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)_张维鹏的博客-CSDN博客 分布式事务 (秒懂)_40岁资深老架构师尼恩的博客-CSDN博客 分布式事务:在分布式…...
基于Java+SpringBoot+Vue前后端分离美食推荐商城设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
最新ChatGPT程序源码+AI系统+详细图文搭建教程/支持GPT4/AI绘画/H5端/完整Prompt知识库
一、AI系统 如何搭建部署人工智能源码、AI创作系统、ChatGPT系统呢?小编这里写一个详细图文教程吧!SparkAi使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统! 1.1 程序核心功能 程序已支持ChatGPT3.5/GPT-4提问、AI绘画、Mi…...
本地启动若依微服务版本
前置工作: 1.导入sql文件 2.安装完nacos 3.安装完redis 启动步骤: 1.开启nacos,在bin目录下 startup.cmd -m standalone 注意:在这之前要配置nacos持久化,修改conf/application.properties文件,增加支持…...
HTML的span标签的作用是什么?答:对文本内容进行精细的样式化和标记。
当谈到HTML中的<span>标签时,它是一个非常基本且灵活的内联元素。它通常用于在文本中应用样式、添加额外的语义或将特定部分标记为一个单独的区域。<span>标签本身并不会给其中的内容带来任何视觉上的变化,但它可以与CSS一起使用,…...
基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码
智慧工地聚焦施工现场岗位一线,围绕“人、机、料、法、环”五大要素,数字化工地平台与现场多个子系统的互联实现了工地业务间的互联互通和协同共享。数字化工地管理平台能够盘活工地各大项目之间孤立的信息系统,实现数据的统一接入、处理与维…...
Redis内存策略
文章目录 Redis内存策略过期策略DB结构惰性删除周期删除 淘汰策略 Redis内存策略 Redis是基于内存存储,所以其性能很强。但单节点的Redis内存不宜过大,否则会影响持久化或主从同步性能。 可以手动修改配置文件来设置Redis的最大内存 # 格式࿱…...
视频监控/视频汇聚/视频云存储EasyCVR平台HLS流集成在小程序无法播放问题排查
安防视频/视频云存储/视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频…...
vue3将通用组件注册成全局组件
一、问题重现 我们用过vue的人都知道会有一个components文件夹用来存放我们的通用组件: 这里我的通用组件就有四个,但是有一些是使用评率比较高的,如果很多地方要使用我还得导入相同的组件,写的都是一样的代码: impo…...
一文速学-让神经网络不再神秘,一天速学神经网络基础-前向传播(三)
前言 思索了很久到底要不要出深度学习内容,毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新,很多坑都没有填满,而且现在深度学习的文章和学习课程都十分的多,我考虑了很久决定还是得出神经网络系列文章,…...
熟悉C#如何转TypeScript——SDK与包引用的主要区别
SDK与包引用的主要区别 在 TypeScript 开发中,包引用(import/require)并不是 SDK 的集合,而是模块化代码库的引用方式。以下是详细解释:核心概念对比特性TypeScript/JavaScript (npm).NET Core SDK包管理工具npm / yar…...
BGP路由优化实战:加速收敛,提升网络稳定性
BGP路由优化实战:加速收敛,提升网络稳定性在复杂的网络环境中,尤其是在大规模数据中心或跨区域互联的网络中,BGP(Border Gateway Protocol)路由协议的性能直接影响着网络的可用性和用户体验。BGP 作为互联网…...
别再只盯着GPS了!手把手教你用Python仿真UWB定位,30厘米精度是怎么来的?
用Python仿真UWB定位:从纳秒脉冲到30厘米精度的全流程解析 在室内导航、工业自动化或仓储物流等领域,定位精度直接决定了系统性能的上限。传统GPS在开阔地带表现优异,但一旦进入室内环境,其信号衰减和多径效应会导致定位误差急剧…...
Midscene.js视觉驱动自动化:从认知到实践的AI跨平台控制指南
Midscene.js视觉驱动自动化:从认知到实践的AI跨平台控制指南 【免费下载链接】midscene Let AI be your browser operator. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 一、认知篇:理解Midscene.js的技术革新 1.1 破解传统自动…...
OpenClaw+Qwen3.5-4B-Claude镜像:30分钟搭建逻辑推理自动化工作流
OpenClawQwen3.5-4B-Claude镜像:30分钟搭建逻辑推理自动化工作流 1. 为什么需要逻辑推理自动化 上周我遇到一个典型的技术问题:需要从200多行Python日志中找出导致接口超时的根本原因。手动排查不仅耗时,还容易遗漏关键线索。这让我开始思考…...
从需求到SQL:手把手教你将‘住院管理系统’的ER图转化为可运行的数据表(附建表语句)
从需求到SQL:住院管理系统数据库设计实战指南 在医疗信息化快速发展的今天,一套设计良好的住院管理系统数据库不仅能提高医院运营效率,更能为患者提供更精准的医疗服务。本文将带你从零开始,完整实现一个住院病人信息管理系统的数…...
Vivado实战:从零封装自定义接口IP核的完整流程
1. 为什么需要封装自定义IP核 第一次接触FPGA开发时,我总喜欢把整个工程的所有代码都堆在一个项目里。直到某天需要复用之前的HDMI显示模块时,才发现要手动复制几十个文件,还得逐个修改端口连接。这种重复劳动让我意识到:封装IP核…...
计算机毕业设计springboot高校实验室安全巡检系统 基于SpringBoot的高校实验室智能安防监管平台 SpringBoot框架下高校实验楼安全隐患排查与预警系统
计算机毕业设计springboot高校实验室安全巡检系统4p1y5wo9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着高等教育规模的持续扩张,高校实验室数量与类型日益增多…...
AMD GPU大模型部署与优化指南:基于ollama-for-amd的本地AI解决方案
AMD GPU大模型部署与优化指南:基于ollama-for-amd的本地AI解决方案 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/gh_mir…...
手机号逆向查询QQ号:3步快速找回QQ号的终极免费方案
手机号逆向查询QQ号:3步快速找回QQ号的终极免费方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾因忘记QQ号而无法登录重要账号?手机号逆向查询QQ号工具为你提供了一种简单高效的解决方案。这个基…...
