b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

iOS性能监控(1)-CPU功耗监控

电脑杂谈  发布时间:2020-07-16 15:21:39  来源:网络整理

笔记本cpu功耗_怎么查看cpu功耗_cpu功耗测试

前言:

最近,在观看戴明老师分享与“性能监控”相关的技术后,我感到很多收获. 在最近的研究的基础上,我总结了一些与性能监控有关的实践,并计划撰写一系列与“性能监控”有关的文章. 目录如下: iOS性能监控(1)-CPU功耗监控

iOS性能监控(2)-主线程卡死监控

iOS性能监控(3)-耗时的方法监控

本文将介绍iOS性能监控工具(QiLagMonitor)中与“ CPU电源监控”相关的功能模块.

CPU(中央处理单元): 中央处理单元主要由三个部分组成: “计算器”,“控制器”和“寄存器”.

计算器: 负责一些算术运算. (计算)

控制器: 负责发布CPU的每个指令所需的信息. (说明)

寄存器: 负责存储操作过程或指令操作的一些临时文件. (保存数据)

CPU具有四个功能: “处理指令”,“执行操作”,“控制时间”和“处理数据”. 与人脑类似,它可以帮助我们完成各种生理活动.

在市场上,我们更熟悉的CPU体系结构是ARM(arm64)和Intel(x86). (PS: 关于ARM和Intel之间的区别可以查看此博客)

问: iPhone的CPU架构是什么?

目前,市场上大多数iPhone都基于arm64架构.

怎么查看cpu功耗_cpu功耗测试_笔记本cpu功耗

由于手臂架构具有低功耗的特性,因此被广泛应用于移动设备领域. (英特尔具有良好的性能,但功耗很高. 因此,它已经失去了在移动领域的市场份额. )

CPU体系结构模型

armv6

iPhone,iPhone 2,iPhone 3G

armv7

iPhone3GS,iPhone 4,iPhone 4S,iPad,iPad 2

armv7s

iPhone 5,iPhone 5c

arm64

iPhone 5s,iPhone 6,iPhone 6 plus,iPhone 7,iPhone 7 plus怎么查看cpu功耗,iPhone 8,iPhone 8 plus,iPhone X,iPhone XS,iPhone XR,iPhone 11,iPhone 11 pro,iPhone 11 pro max,iPad Air ,iPad Air2,iPad mini2,iPad mini3,iPad mini4,iPad版...

PS: CPU与GPU? GPU是图像处理器. 在大多数计算机中,GPU仅用于绘制图像. 它将快速计算当前屏幕的所有像素并将其绘制在显示器上.

谈论QiCPUMonitor的一般实现.

struct thread_basic_info {
        time_value_t    user_time;      // 用户运行时长
        time_value_t    system_time;    // 系统运行时长
        integer_t       cpu_usage;      // CPU使用率(理论上限为1000)
        policy_t        policy;         // 调度策略
        integer_t       run_state;      // 运行状态
        integer_t       flags;          // 各种标记
        integer_t       suspend_count;  // 暂停线程的计数
        integer_t       sleep_time;     // 休眠时间
};

怎么查看cpu功耗_cpu功耗测试_笔记本cpu功耗

名称介绍

user_time

用户运行时(准确无误).

system_time

系统运行时(精确到微妙).

cpu_usage

CPU使用率(理论上限1000).

政策

计划策略.

run_state

五种“操作状态”:

1>跑步

2>停止已停止

cpu功耗测试_怎么查看cpu功耗_笔记本cpu功耗

3>等待

4>不间断

5>停止被阻止

标志

三种“线程标志”:

1>换出

2>空闲空闲

3>全局强制空闲.

暂挂计数

已暂停的线程数.

sleep_time

线程被挂起的时间(精确到秒).

分别: 参数名称参数含义

怎么查看cpu功耗_笔记本cpu功耗_cpu功耗测试

线程

用于存储当前任务下的所有线程信息.

threadCount

用于存储多个线程.

thisTask

用于存储当前任务任务.

    thread_act_array_t threads;               //! 一个数组,用来记录当前任务下的所有线程。
    mach_msg_type_number_t threadCount = 0;   //! 一个数,该参数用来记录线程的个数。
    const task_t thisTask = mach_task_self(); //! 获取当前任务的task

    kern_return_t kr = task_threads(thisTask, &threads, &threadCount); //! 通过thisTask,获取threads以及threadCount。

    if (kr != KERN_SUCCESS) { //! 检查是否成功,KERN_SUCCESS = 0 代表成功,其他有对应的错误码有52种。
        return;
    }

    //! 遍历当前任务内存活的所有线程
    for (int i = 0; i < threadCount; i++) {
        thread_info_data_t threadInfo; // 32位data
        thread_basic_info_t threadBaseInfo;
        mach_msg_type_number_t threadInfoCount = THREAD_INFO_MAX;
        if (thread_info((thread_act_t)threads[i], THREAD_BASIC_INFO, (thread_info_t)threadInfo, &threadInfoCount) == KERN_SUCCESS) {
            threadBaseInfo = (thread_basic_info_t)threadInfo; // 获取线程的信息
            if (!(threadBaseInfo->flags & TH_FLAGS_IDLE)) {
                integer_t cpuUsage = threadBaseInfo->cpu_usage / 10; // CPU最大usage为1000,因此除10即可获得CPU当前的利用率。
                if (cpuUsage > CPUMONITORRATE) { // 超过设定的阈值时,记录堆栈
                    //cup 消耗大于设置值时打印和记录堆栈
                    NSString *reStr = qiStackOfThread(threads[i]);
                    QiCallStackModel *model = [[QiCallStackModel alloc] init];
                    model.stackStr = reStr;
                    //记录中
                    [[[QiLagDB shareInstance] increaseWithStackModel:model] subscribeNext:^(id x) {}];
                    NSLog(@"CPU useage overload thread stack:
%@",reStr);
                }
            }
        }
    }

为了同时进行监视,它不会影响App的性能怎么查看cpu功耗,因此此判断使用一个计时器,该计时器可以每3秒刷新一次.

    //! 监测 CPU 消耗
    self.cpuMonitorTimer = [NSTimer scheduledTimerWithTimeInterval:3
                                                             target:self
                                                           selector:@selector(updateCPUInfo)
                                                           userInfo:nil
                                                            repeats:YES];

源代码: QiLagMonitor

最后,我在iOS行业的巨头们的肩膀上完成了本系列. 感谢戴明老师的精彩技术交流. 祝大家学习顺利,工作顺利. 随附戴明老师课程的链接: “ iOS开发大师课程”,谢谢!


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-282476-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...