Android代码中while()循环CPU资源占用率100%的问题 ╰半橙微兮° 2021-12-04 01:23 377阅读 0赞 最近通过JNI程序写了一个打开、读写串口的代码,发现程序跑起来后CPU资源占用率达到了100%的问题。 **代码段如下:** while (pCSerial->m_bReadThreadRuning) { //读取一个串口设备 length = read(pCSerial->m_hComm, recvBuf, 64); } 代码逻辑很简单,就是循环去读取串口数据。 **解决方法:** 增加一个sleep,cpu资源占用率降低到15%左右 while (pCSerial->m_bReadThreadRuning) { usleep(1); //读取一个串口设备 length = read(pCSerial->m_hComm, recvBuf, 64); } 作用:强制放弃剩下的时间片,让其他线程有机会竞争时间片,从而降低cpu资源占用率。 **背景** 时间片算法,安卓系统内核CPU的竞争策略是时间片算法; **含义**:时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。 **原理**:既然时间片到了,就会把CPU资源分给其他进程使用,那为啥还会出现CPU资源占用率100%的问题呢? 循环中,哪怕是空的循环进程中虽然没做任何事情,却没有阻塞条件(如sleep),进程一直处于RUNNING状态,也就是说即使该进程时间片到了被切换,该进程还是处于就绪队列,等待下次调度。 优先级越高的进程时间片分配越长,比如你的进程设置了优先级:android:priority=“999” **解决思路:** 1、Thread.yield();主动放弃当前线程的时间片 当前线程还是在就绪队列中,而不是在阻塞队列,如果没有其他就绪态的线程,则该线程继续使用。 2、Thread.sleep(0);主动放弃当前线程的时间片,但是只允许优先级相等或者更高的进程使用CPU 当前线程还是在就绪队列中,只允许优先级高的进程使用CPU,没有合适的线程,重新占用CPU 3、Thread.sleep(1);强制放弃当前的时间片,并休息1ms,(实际上可能不止休息1ms) 其他就绪线程竞争时间片,不用在乎优先级。
相关 IDEA的CPU占用率高问题解决方法 [IDEA的CPU占用率高问题解决方法\_小关同学喜欢吃汉堡的博客-CSDN博客\_ideacpu占用率过高][IDEA_CPU_-CSDN_ideacpu] [IDEA_ 悠悠/ 2024年03月30日 14:27/ 0 赞/ 35 阅读
相关 Linux CPU 占用率 100% 排查五步法 > 本文由 [简悦 SimpRead][SimpRead] 转码, 原文地址 [www.toutiao.com][] > 你有没有遇到过这种情况,Linux 服务器 CPU 淡淡的烟草味﹌/ 2024年03月17日 11:56/ 0 赞/ 55 阅读
相关 服务器CPU占用率过高问题分析 在开发过程中,碰到了Java进程占用cpu过高的现象,本篇来介绍一下排查思路。 1. 查看占用CPU过高Java进程 使用 `top -p <pid>` 命令(为Jav ╰半夏微凉°/ 2022年12月27日 01:53/ 0 赞/ 159 阅读
相关 Docker宿主机agetty进程cpu占用率100% 问题 操作环境 CentOS Linux release 7.4.1708 (Core) Docker version 17.03.1-ce, build c6d412e 悠悠/ 2022年08月31日 15:24/ 0 赞/ 210 阅读
相关 Docker宿主机agetty进程cpu占用率100% 问题 操作环境 CentOS Linux release 7.4.1708 (Core) Docker version 17.03.1-ce, build 柔情只为你懂/ 2022年06月05日 04:25/ 0 赞/ 276 阅读
相关 docker查看容器的cpu占用率 > docker stats ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmN 谁践踏了优雅/ 2022年01月27日 01:45/ 0 赞/ 461 阅读
相关 Android代码中while()循环CPU资源占用率100%的问题 最近通过JNI程序写了一个打开、读写串口的代码,发现程序跑起来后CPU资源占用率达到了100%的问题。 代码段如下: while (pCSerial->m_bRea ╰半橙微兮°/ 2021年12月04日 01:23/ 0 赞/ 378 阅读
相关 解决Apache出现的CPU高占用率的问题 所谓Apache出现CPU高占用率就是指Apache在一段时间内持续占用很高的CPU使用率,甚至达到CPU100%,这个时候造成网站无法访问。解决的方法就是仔细观察Apache 阳光穿透心脏的1/2处/ 2021年09月10日 04:42/ 0 赞/ 1768 阅读
还没有评论,来说两句吧...