ios 平台获取线程cpu占用率

1. NSThread的介绍

NSThread是苹果爸爸针对Pthread而封装的Objective-C对象, 有啥好处?

说到NSThread的话, 我么那就不得不提到它的底层叫做Pthread, 这是一个由C语言写的多线程技术, 可以在Unix, Linux和Windows上使用。但由于是用C语言所写的, 所以需要自己管理线程生命周期, 开发难度比较大(不得不佩服一下搞C语言的大佬们), 这里我们简单了解一下就好了, 想深入了解的话, 可以自行去谷歌一下.

中间省略了需要Pthread管理线程生命周期代码.
更加的面向对象, 简单易懂, 而且还可以直接操作线程对象.
之前我们经常看到[NSThread currentThread]这句代码, 就是获取当前线程信息的.

2. oc中创建线程以及线程设置名称

dispatch_queue_t queue = dispatch_queue_create("lyg.cputest", DISPATCH_QUEUE_SERIAL);
    
    dispatch_async(queue, ^{
        int rc = pthread_setname_np("lyg.cputest");
        NSLog(@"getname returned thread %@",  [NSThread currentThread]);
        if (rc != 0)
        {
            printf("pthread_setname_np failed.");
        }
    });
    
    dispatch_queue_t queue1 = dispatch_queue_create("lyg.cputestttt", DISPATCH_QUEUE_SERIAL);
    
    dispatch_async(queue1, ^{
        [[NSThread currentThread] setName:@"lyg.cputestttt"];
    });
static void dumpThreads(void) { 
    char name[256]; 
    mach_msg_type_number_t count; 
    thread_act_array_t list; 
    task_threads(mach_task_self(), &list, &count); 
    for (int i = 0; i < count; ++i) { 
     pthread_t pt = pthread_from_mach_thread_np(list[i]); 
     if (pt) { 
      name[0] = '\0'; 
      int rc = pthread_getname_np(pt, name, sizeof name); 
      NSLog(@"mach thread %u: getname returned %d: %s", list[i], rc, name); 
     } else { 
      NSLog(@"mach thread %u: no pthread found", list[i]); 
     } 
    } 
} 

3. 那么我们如何获取线程信息?

问题很简单:task_threads返回Mach端口的数组,而不是pthread_t的数组。在您致电pthread_getname_np时,您正在将Mach端口视为pthread_t。但是Mach端口不是pthread_t。您需要将每个转换为使用pthread_from_mach_thread_np一个pthread_t:

CPU使用率其实就是运行的程序占用的CPU资源,表示机器在某个时间点的运行程序的情况。
使用率越高,说明机器在这个时间上运行了很多程序,反之较少。
使用率的高低与CPU强弱有直接关系。
现代分时多任务操作系统对 CPU 都是分时间片使用的:比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms,再又是A进程占10ms,B进程占30ms,空闲60ms;如果在一段时间内都是如此,那么这段时间内的占用率为40%。
CPU对线程的响应并不是连续的,通常会在一段时间后自动中断线程。
未响应的线程增加,就会不断加大CPU的占用。
cpu使用率高的原因有很多,但是一般都是由于病毒木马或开机启动项过多所致。
高CPU使用率也可能表明应用程序的调整或设计不良。
优化应用程序可以降低CPU的使用率。
内存使用率指的是此进程所开销的内存。
占内存大的程序不一定会占用很多的CPU资源,而占CPU大的程序也不一定开销太大的内存。
某一程序的CPU占用率过高会影响其他程序的运行。
而某一程序占用内存过大,会影响机器的整体性能。

https://www.jianshu.com/p/bc940ac493aa

http://cn.voidcc.com/question/p-vlyeyccn-yk.html

https://blog.csdn.net/jasonblog/article/details/49909209

你可能感兴趣的:(ios 平台获取线程cpu占用率)