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

  • 相关阅读:
    微服务迁移记(二):注册中心(consul搭建)
    微服务迁移记(一):技术架构
    小程序入坑记录
    不思量,自难忘:我的10年程序生涯
    your password has expired.to log in you must change it
    Javascript中 a.href 和 a.getAttribute('href') 结果不完全一致
    PHP不使用递归的无限级分类
    百度移动搜索自动转码太坑爹,JS跳转地址会被抓取
    iScroll 下 a 标签失效
    浏览器的云加速可能导致IP统计异常
  • 原文地址:https://www.cnblogs.com/jkred369/p/6878635.html
Copyright © 2020-2023  润新知