分享

如何降低代码运行时的cpu占用率

 冷泉阁 2016-05-20
怎么降低代码运行时的cpu占用率
如题怎么降低代码运行时cpu的占用率,有什么方法呢?
顺便问下另一个问题,多线程是不是可以降低cpu的占用率?
还一个问题就是c和c++中代码的执行都是一行一行的顺序执行,怎么就能同时执行两行或者以上的代码或者函数,这个是不是就叫多线程?
我对多线程一点都不了解,编程功底也不咋样的,请大家不吝赐教。灰常感谢!
分享到:

------解决方案--------------------
加sleep就可以降低占用率。
一般用多线程都是为了提高cpu占用率
------解决方案--------------------
如果不开启子线程,那么你的程序就只有一个主线程,程序的执行自然就是一行一行的按顺序来。如果开了子线程,那么这个子线程的运行就不会受阻与主线程。比如你需要一个循环while(1),来不停的做某一件事,如果在主线程中执行这个的话就会不断占用CPU,从而造成你的程序假死(无响应),如果将循环放到一个子线程中,就不会有这个假死的现象了,CPU的占用率也会明显下降。多线程也不是绝对意义上的“同时”执行,而是根据时间片在轮询执行,只不过CPU轮换速度很快,一般觉察不到而已
------解决方案--------------------
如果你的代码是一个大大的循环,而且是一个长久不停的循环,那么用多线程,可以降低你的程序的cpu占用率。
执行两行或者两行以上代码,多线程和并行处理编程是你很好的选择。
------解决方案--------------------
引用:
如果不开启子线程,那么你的程序就只有一个主线程,程序的执行自然就是一行一行的按顺序来。如果开了子线程,那么这个子线程的运行就不会受阻与主线程。比如你需要一个循环while(1),来不停的做某一件事,如果在主线程中执行这个的话就会不断占用CPU,从而造成你的程序假死(无响应),如果将循环放到一个子线程中,就不会有这个假死的现象了,CPU的占用率也会明显下降。多线程也不是绝对意义上的“同时”执行,而是根据时间片在轮询执行,只不过CPU轮换速度很快,一般觉察不到而已

开线程while(1)会降低CPU的占用率?开玩笑的把?
降低CPU的占用率,基本就是不要用while(1)空转,用消息,通知等,比如单独一个线程接收socket数据,不要用异步方式不停判断返回值,而是使用同步方式
------解决方案--------------------
CPU用来执行代码,你要降低CPU占用率,不就是要让程序跑的更慢么?
问下你领导到底是要干什么?如果是绝得这个进程不应该和其它的抢cpu,那么降低这个进程的优先级。
------解决方案--------------------
//循环向a函数每次发送200个字节长度(这个是固定的)的buffer,
//a函数中需要将循环传进来的buffer,组成240字节(也是固定的)的新buffer进行处理,
//在处理的时候每次从新buffer中取两个字节打印
#include 
#include 
#include 
#include 
#include 
#include 
//Log{
#define MAXLOGSIZE 20000000
#define MAXLINSIZE 16000
#include 
#include 
#include 
char logfilename1[]='MyLog1.log';
char logfilename2[]='MyLog2.log';
static char logstr[MAXLINSIZE+1];
char datestr[16];
char timestr[16];
char mss[4];
CRITICAL_SECTION cs_log;
FILE *flog;
void Lock(CRITICAL_SECTION *l) {
    EnterCriticalSection(l);
}
void Unlock(CRITICAL_SECTION *l) {
    LeaveCriticalSection(l);
}
void LogV(const char *pszFmt,va_list argp) {
    struct tm *now;
    struct timeb tb;

    if (NULL==pszFmt
------解决方案--------------------
0==pszFmt[0]) return;
    _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
    ftime(&tb);
    now=localtime(&tb.time);
    sprintf(datestr,'%04d-%02d-%02d',now->tm_year+1900,now->tm_mon+1,now->tm_mday);
    sprintf(timestr,'%02d:%02d:%02d',now->tm_hour     ,now->tm_min  ,now->tm_sec );
    sprintf(mss,'%03d',tb.millitm);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多