日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50%

發布時間:2024/10/14 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50% 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好記性不如爛筆頭 ——東西太多,腦子永遠不夠用

問題

用 C 語言寫個程序,運行時,cpu占用率一直保持50%

解決方案

一看題目好眼熟!《編程之美》!然而已經記不清楚了,果然東西需要經常用經常積累,廢話不多說重來一遍。

第一步:cpu占用率計算方法

既然想要讓cpu占有率一直保持一定數值,就想要弄明白,cpu占用率是如何得到的

在Linux下,CPU利用率分為用戶態,系統態和空閑態,分別表示CPU處于用戶態執行的時間,系統內核執行的時間,和空閑系統進程執行的時間,三者之和就是CPU的總時間,當沒有用戶進程、系統進程等需要執行的時候,CPU就執行系統缺省的空閑進程。從平常的思維方式理解的話,CPU的利用率就是非空閑進程占用時間的比例,即CPU執行非空閑進程的時間/ CPU總的執行時間。

那么問題就很簡單了,我們只要保持讓cpu運行50,休息50就可以保證cpu的利用保持在50%了(忽略其他程序的影響)。運行到100%很簡單,無限循環執行代碼,不過應該會報錯吧?先試試。

#include

int main(){

while(1){

for(int i = 0 ;i<100;i++);

}

return 0;

}

代碼執行完畢,成功接近100%(話說死循環不報錯的嗎?)

代碼執行結果

下面我們要做的就是控制好進程閑置的時間,讓cpu的閑置時間等于非閑置時間,問題也就解決了。最笨的方法先填一個數字試試。

#include

#include

int main(){

while(1){

for(int i = 0 ;i<100;i++){};

sleep(50);

}

return 0;

}

在mac下for循環后面需要加花括弧不然會報錯,不知道為什么之前的不報錯。

結果是沒有反應。cpu:0,執行時間0。好吧好像太低估cpu能力了。還是科學一點的方案吧。用時鐘記錄運行開始時間,并控制runtime和idle的時間比例就可以了。雖然時鐘會有一定的誤差,但是理論上是可以行的通的。

#include

#include

#include

#include

int main(){

int time_start;

int fulltime = 100;//總時間

int runtime = 50;//運行時間

while(1){

time_start = clock();

while((clock()-time_start)

usleep(fulltime-runtime);

}

return 0;

}

運行結果

從運行結果中,可以看到并沒有達到50%,根據我的猜測有以下幾點影響:

1、系統中還有其他運行程序,留給本程序的cpu肯定達不到100% 。從理論上來說本程序進行的更頻繁,占用cpu也會更多,可以嘗試把時間改到1,結果應該會更接近點

2、時鐘計算的誤差,無論是clock()還是usleep()都存在誤差。特別是睡眠的時鐘會設置一個緩沖區域,之前之后醒來都可以。

如果想要做的更準確的話,應該實時監測cpu使用率,然后來控制程序運行,不過應該也做不到完全準確,畢竟cpu使用率只是一個統計值。

關于sleep()函數的單位很頭疼,不同平臺好像有不同的參數單位,可以自己嘗試一下。

附上java代碼以及運行結果

import java.lang.Thread;

import java.text.SimpleDateFormat;

public class cpu50 {

public static void main(String[] args) {

long time_start;

int fulltime = 100;

int runtime = 50;

while(true){

time_start = System.currentTimeMillis();

while((System.currentTimeMillis()-time_start)

try {

Thread.sleep(fulltime-runtime);

}catch (InterruptedException e) {

return;

}

}

}

}```

![Java運行結果](http://upload-images.jianshu.io/upload_images/1677321-26ef9172e4a24dd8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

總結

以上是生活随笔為你收集整理的c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50%的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。