zoukankan      html  css  js  c++  java
  • 防止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所起到的作用。再开发多任务系统的时候,不妨考虑在程序中引入这种机制,也许能收到意想不到的效果。

  • 相关阅读:
    RAID技术
    敏捷开发
    如何写出高质量的代码?现在知道还不晚
    Java大型互联网架构技术经验
    Chrome精品插件
    2018 java BAT最新面试宝典
    Java成神之路(2018版)
    三分钟读懂摘要算法
    我的Mac应用清单
    事务隔离级别
  • 原文地址:https://www.cnblogs.com/jkred369/p/6878635.html
Copyright © 2011-2022 走看看