zoukankan      html  css  js  c++  java
  • 【C#】【Thread】SpinWait

     System.Threading.SpinWait 是一个轻量同步类型,可以在低级别方案中使用它来避免内核事件所需的高开销的上下文切换和内核转换。 在多核计算机上,当预计资源不会保留很长一段时间时,如果让等待线程以用户模式旋转数十或数百个周期,然后重新尝试获取资源,则效率会更高。 如果在旋转后资源变为可用的,则可以节省数千个周期。 如果资源仍然不可用,则只花费了少量周期,并且仍然可以进行基于内核的等待。 这一旋转-等待的组合有时称为“两阶段等待操作”。

    简单的说SpinWait 更省资源

    while(true)
    {
      Thread.Sleep(1);
    }

    CPU 大约用掉了 2%

    如果 Thread.Sleep(1) 去掉,则CPU接近耗掉50%

    然后把Thread.Sleep拿掉,改用 SpinWait.SpinUntil 

        SpinWait.SpinUntil(() => false, 1000);//当第一个参数为true时结束等待,第二个是超时设置

    CPU使用0%

  • 相关阅读:
    hadoop架构
    hdfs存储模型
    C语言编译过程
    linux文件类型和权限
    推荐系统效果评估
    推荐系统冷启动
    Js计算-当月每周有多少天
    3D动画
    固定边栏——淘宝滚动效果
    jquery图片轮播-插件
  • 原文地址:https://www.cnblogs.com/mqxs/p/6237222.html
Copyright © 2011-2022 走看看