防止cpu 一直被占用 sleep(0) 和 yield

?

在java的Thread類中有兩個有用的函數,sleep和yield,sleep就是線程睡眠一定的時間,也就是交出cpu一段時間,yield用來暗示系統交出cpu控制權。這兩個函數在多線程開發的時候特別有用,可以合理的分配cpu,提高程序的運行效率。對于sleep來說,有一個用法可以代替yield函數——sleep(0)。調用這個函數也相當于告訴CPU交出cpu的控制權。
在C/C++里面,也有sleep函數(Windows下叫Sleep,Unix下叫sleep),同樣也可以用sleep(0)的用法來交出cpu的控制權。
代碼里面適當的地方加入這種機制,當系統負擔比較重的時候,可以平衡的分配cpu時間,當系統壓力小的時候也不會影響程序正常的運行。舉一個簡單的例子,分別在用c和java做兩組簡單的程序,分為A組和B組。
A組:
????C++:
????????#include <windows.h>
????????void main()
????????{
????????????while(1) Sleep(0);
????????}
????java:
????????public class MyThread extends Thread {
?????????????public static void main(String[] args) throws Exception {
??????????????System.out.println("start runing...");
??????????????????while(true){
???????????????????yield;
??????????????????}
????????}
B組:
????C++:
????????#include <windows.h>
????????void main()
????????{
????????????while(1);
????????}
????java:與A組相同
????
同時運行A組中的C++程序與Java程序,然后打開任務管理器,查看進程按cpu占有時間排序,就會發現主要是這兩個程序占用cpu,而且比較平均,基本上是一半一半。
同時運行B組中的C++程序與Java程序,再查看cpu占用率,就會發現大部分cpu都被C++的程序占用了,而java程序的cpu占用率為0。
上面兩組測試充分證明了sleep(0)和yield()函數對釋放cpu所起到的作用。再開發多任務系統的時候,不妨考慮在程序中引入這種機制,也許能收到意想不到的效果。

轉載于:https://www.cnblogs.com/jkred369/p/6878635.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254546.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

做一個有膽識的有為青年

1、一個年輕人&#xff0c;如果在這四年的時間里&#xff0c;沒有任何想法&#xff0c;他這一生&#xff0c;就基本這個樣子&#xff0c;沒有多大改變了。 2、成功者就是膽識加魄力&#xff0c;曾經在火車上聽人談起過溫州人的成功&#xff0c;說了這么三個字&#xff0c;“膽…

jstack應用-查找CPU飚高的原因

場景 在系統上線后&#xff0c;經常會遇到運維的同學跑過來說&#xff1a;“這次發版后&#xff0c;cpu線程使用率到一場&#xff0c;到100%了”。這時候不要慌&#xff0c;可以使用堆轉儲來分析到底是哪個線程引起的。 查找元兇 [rootjava_mofei_01 test]# top Mem: 16333644…

Enhancement增強圖形halcon算子,持續更新

目錄coherence_enhancing_diffemphasizeequ_histo_imageilluminatemean_curvature_flowscale_image_max_shock_filtercoherence_enhancing_diff 功能&#xff1a;執行一個圖像的一個一致性增強擴散。 emphasize 功能&#xff1a;增強圖像對比度。 equ_histo_image 功能&am…

音頻中采樣位數,采樣率,比特率的名詞解釋(轉)

采樣位數&#xff08;采樣大小&#xff09;&#xff1a; 采樣位數可以理解為采集卡處理聲音的解析度。這個數值越大&#xff0c;解析度就越高&#xff0c;錄制和回放的聲音就越真實。我們首先要知道&#xff1a;電腦中的聲音文件是用數字0和1來表示的。所以在電腦上錄音的本質就…

WebSocket實時異步通信

WebSocket實時異步通信 【一】WebSocket簡介 WebSocket是HTML5推出一個協議規范&#xff0c;用來B/S模式中服務器端和客戶端之間進行實時異步通信。 眾所周知&#xff0c;傳統的HTTP協議中&#xff0c;服務器端和客戶端通信只能是在客戶端發送一個請求之后&#xff0c;服務器端…

多線程和多進程的區別(小結)

分類&#xff1a; linux 2009-06-19 09:33 11501人閱讀 評論(15) 收藏 舉報 很想寫點關于多進程和多線程的東西&#xff0c;我確實很愛他們。但是每每想動手寫點關于他們的東西&#xff0c;卻總是求全心理作祟&#xff0c;始終動不了手。 今天終于下了決心&#xff0c;寫點東西…

redis-cli使用密碼登錄

redis-cli使用密碼登錄 注意IP地址要寫正確&#xff01; 學習了: https://blog.csdn.net/lsm135/article/details/52932896 https://blog.csdn.net/zyz511919766/article/details/42268219 https://zhidao.baidu.com/question/756651357338691604.html 登錄后 auth pass 或者 r…

FFT快速傅式變換算法halcon算子,持續更新

目錄convol_fftconvol_gaborcorrelation_fftdeserialize_fft_optimization_dataenergy_gaborfft_genericfft_imagefft_image_invgen_bandfiltergen_bandpassgen_derivative_filtergen_filter_maskgen_gaborgen_gauss_filtergen_highpassgen_lowpassgen_mean_filtergen_sin_band…

仿照vue實現簡易的MVVM框架(一)

代碼github地址&#xff1a; https://github.com/susantong/myMVVM 主要的方法有&#xff1a; compile 深度遍歷前端界面的節點&#xff0c;將其復制進一個addQuene隊列中pasers 遍歷所有的節點&#xff0c;并將節點包裝成一個含有本節點、自定義屬性及屬性值的對象。要想實現雙…

tomcat 啟動時內存溢出

在tomcat_home/bin目錄下找到catalina.bat&#xff0c;用文本編輯器打開&#xff0c;加上下面一行&#xff1a; set JAVA_OPTS -Xms1024M -Xmx1024M -XX:PermSize256M -XX:MaxNewSize256M -XX:MaxPermSize256M 解釋一下各個參數&#xff1a; -Xms1024M&#xff1a;初始化堆內存…

@angular/platform-browser-dynamic

/** experimental */ export declare class JitCompilerFactory implements CompilerFactory {createCompiler(options?: CompilerOptions[]): Compiler; }export declare const platformBrowserDynamic: (extraProviders?: StaticProvider[] | undefined) > PlatformRef;…

牛人項目失敗的總結

tom_lt: 遇到的失敗項目比較多&#xff01;讓人郁悶&#xff01;&#xff01; 仔細分析原因&#xff0c;主要在于&#xff1a; 1.項目開始需求不明確。領導決定動手&#xff0c;就開始啟動項目&#xff0c;造成和客戶需要差距太大&#xff0c;導致失敗&#xff1b; 2.需求變更沒…

Android:日常學習筆記(8)———探究UI開發(5)

Android:日常學習筆記(8)———探究UI開發(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrolling list. The items come from the ListAdapter associated with this view. 1.關于ArrayAdapter&#xff1a; ArrayAdapter<T> 是 ListAd…

Geometric-Transformations圖像幾何變換halcon算子,持續更新

目錄affine_trans_imageaffine_trans_image_sizeconvert_map_typemap_imagemirror_imagepolar_trans_image_extpolar_trans_image_invprojective_trans_imageprojective_trans_image_sizerotate_imagezoom_image_factorzoom_image_sizeaffine_trans_image 功能&#xff1a;把任…

hibernate inverse屬性的作用

hibernate配置文件中有這么一個屬性inverse&#xff0c;它是用來指定關聯的控制方的。inverse屬性默認是false&#xff0c;若為false&#xff0c;則關聯由自己控制&#xff0c;若為true&#xff0c;則關聯由對方控制。見例子&#xff1a; 一個Parent有多個Child,一個Child只能有…

分布式鎖與實現(一)——基于Redis實現

概述 目前幾乎很多大型網站及應用都是分布式部署的&#xff0c;分布式場景中的數據一致性問題一直是一個比較重要的話題。分布式的CAP理論告訴我們“任何一個分布式系統都無法同時滿足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和…

淺析軟件項目管理中十個誤區(來自:http://manager.csdn.net/n/20051213/30907.html)

隨著計算機硬件水平的不斷提高&#xff0c;計算機軟件的規模和復雜度也隨之增加。計算機軟件開發從“個人英雄”時代向團隊時代邁進&#xff0c;計算機軟件項目的管理也從“作坊式”管理向“軟件工廠式”管理邁進。這就要求軟件開發人員特別是軟件項目管理人員更深一步地理解和…

倆孩隨筆

倆孩隨筆 有人給我貼了技術男加奶爸的標簽&#xff0c;不過這兩項都不是我的強項。我深知自己最大的長處在哪&#xff1a;普通&#xff0c;扔人堆里&#xff0c;不是認不出來&#xff0c;而是壓根看不著。想把事情做好&#xff0c;常常會用力過度。工作平平淡淡&#xff0c;需…

Inpainting圖像修復halcon算子,持續更新

目錄harmonic_interpolationinpainting_anisoinpainting_cedinpainting_ctinpainting_mcfinpainting_textureharmonic_interpolation 功能&#xff1a;對一個圖像區域執行諧波插值。 inpainting_aniso 功能&#xff1a;通過各向異性擴散執行圖像修復。 inpainting_ced 功能…

算法(偽代碼)的書寫

q ? Queue&#xff08;隊列&#xff09;, s ? Set&#xff08;集合&#xff09;pq ? PriorityQueue&#xff08;優先隊列&#xff09;d ? distance1. initialization 變量&#xff0c;數據結構的定義&#xff0c;及初始值的賦值&#xff1b;比如著名的 Dijkstra &#xff0…