多线程环境下什么是busy spin?

2024-02-07

什么是多线程环境下的“Busy Spin”?

它有什么用处以及如何在多线程环境中用java实现它?

它以什么方式有助于提高应用程序的性能?


其他一些答案忽略了忙碌等待的真正问题。

除非您正在谈论一个您关心保存的应用程序电气功率,那么消耗 CPU 时间本身并不是一件坏事。只有当有其他线程或进程准备运行时,这才是不好的。它是really当准备运行的线程之一是繁忙等待循环正在等待的线程时,情况会很糟糕。

这才是真正的问题。在普通操作系统上运行的普通用户模式程序无法控制哪些线程在哪些处理器上运行,普通操作系统无法区分忙于等待的线程和正在工作的线程,即使操作系统知道线程正在忙等待,它也无法知道线程在等待什么。

因此,忙碌的服务员完全有可能等待许多毫秒(实际上是永恒),等待一个事件,而唯一可以使事件发生的线程则坐在一边(即在运行队列中)等待轮到使用CPU了。

繁忙等待通常用于严格控制哪些线程在哪些处理器上运行的系统中。当您遇到事件时,忙碌等待可能是等待事件的最有效方式。know导致它的线程实际上在不同的处理器上运行。当您为操作系统本身编写代码或编写在实时操作系统下运行的嵌入式实时应用程序时,通常会出现这种情况。


凯文·沃尔特斯 (Kevin Walters) 写过等待时间很短的案例。在普通操作系统上运行的受 CPU 限制的普通程序可能被允许在每个时间片中执行数百万条指令。因此,如果程序使用自旋锁来保护仅由几条指令组成的临界区,那么任何线程在临界区中时都不太可能丢失其时间片。这意味着,如果线程 A 发现自旋锁被锁定,那么持有该锁的线程 B 很可能实际上is运行在不同的CPU上。这就是为什么当您知道普通程序将在多处理器主机上运行时,可以在普通程序中使用自旋锁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程环境下什么是busy spin? 的相关文章

  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 组名称变量在天蓝色管道中可以是动态的吗?

    我在 azure 上有两个环境 它们之间的区别之一只是来自变量组的环境变量 是否可以为一个管道动态设置组名称 而不是设置两个可以映射自己的组变量的管道 这是我的构建管道的示例 trigger master develop jobs job
  • jquery 无法在 Rails 中运行

    我已经阅读了很多关于在 Rails 中使用 jquery 的页面 但似乎仍然无法让它工作 我有 jquery rails gem 并且安装了 我在 application js 文件中有 require 语句 这是我一直运行的测试页面
  • Commission Junction 直接链接

    有谁知道是否有办法通过跟踪直接链接到 Commission Junction 上的广告商 我们不想依赖提要中发送的链接 因为其中很多都是垃圾链接 我想要的是一个仅转到广告商主页并且仍然允许我们接收佣金的链接 就像是 如果它必须通过 CJ 的
  • 使用 ruby​​-gmail 读取 Gmail 邮件

    我正在寻找一个实例方法ruby gmailgem 可以让我阅读 身体 或者 subject Gmail 邮件的 查看文档后发现here http www rubydoc info gems ruby gmail 0 3 1 我什么也没找到
  • 单击链接后保持全屏 api 全屏显示

    我正在使用 HTML5 全屏 API 因此用户可以全屏查看我的网站 但是当用户单击链接 例如菜单项 时 用户会切换回正常浏览器模式 当用户单击某些链接时 如何使浏览器保持全屏 最好不必将整个网站转换为 AJAX 页面加载系统 如果不转换为
  • 选项卡背景颜色幻灯片过渡到下一个选项卡

    我正在尝试实现背景过渡 当您单击选项卡时 当前选项卡的背景会滑动到单击的选项卡 有人可以帮忙吗 before after box sizing border box radio wrap input position absolute op
  • Angular Date 过滤器在 Firefox 中不起作用

    我正在使用日期过滤器来格式化我的角度应用程序中的日期 在 Firefox 中 我得到的日期值为 未定义 NaN NaN NaN NaN NaN PM 在 Chrome 中 它的工作原理非常完美 2014 年 6 月 25 日 7 22 47
  • Javascript split 将字符串分成两部分,无论字符串中存在多少个吐出字符

    我想使用 split 函数将 Javascript 中的字符串拆分为两部分 例如我有字符串 str 123 345 678 910 如果我使用 javascripts split 它会将其分为 4 部分 但我需要它分为两部分 仅考虑它遇到的
  • InfoPath 2013 是否支持 Visual Studio 2013?

    我正在尝试为 InfoPath 2013 表单开发自定义代码 我安装了 Visual Studio 2013 Professional 但在尝试编辑代码时收到以下消息 The following external components ar
  • 具有多个 AND 条件的 DataTable 选择实现

    我正在使用一个包含大约 50 000 行的 DataTableDataTable Select从中检索行 这Select需要多个AND条件包括通配符匹配 我玩过并发现通过做同样的事情Select多步执行可以大大减少执行时间 但是改变一下执行
  • linux bash脚本获取用户输入并存储在数组中

    我想编写一个 bash 脚本来获取用户输入并将其存储在数组中 输入 1 4 6 9 11 17 22 我希望将其保存为数组 像这样读 read a arr Test read a arr lt lt lt 1 4 6 9 11 17 22
  • Facebook c# sdk 获取用户电子邮件

    我有一个使用 facebook 进行身份验证的网站 我想在用户注册时收集一些基本信息 包括他们的电子邮件地址 我的登录代码是标准的 public ActionResult Login string returnUrl var oAuthCl
  • Web 浏览器中 HTML5 和 CSS3 支持的最佳指南是什么?

    您知道有关 HTML5 和 CSS3 的有用资源吗 UPDATE 我 我想很多人 正在寻找实用信息 了解如何以及在多大程度上可以使用这些未完成的技术 我发现了一个非常有用的资源 http caniuse com http caniuse c
  • Swift 泛型函数中的位移位

    我正在尝试编写一个需要移位操作的通用函数 我的行为我不理解 这是一个演示该问题的简单函数 func testBytes
  • 什么是无头服务,它做什么/完成什么,以及它的一些合法用例是什么?

    我读过一些关于 Kubernetes 的书籍以及文档中有关无头服务的页面 https kubernetes io docs concepts services networking service headless services 但我仍
  • 如何触发 Hudson 的另一项工作作为预构建步骤?

    如何触发 Hudson 的另一项工作作为预构建步骤 有一个参数化触发器插件 https wiki jenkins ci org display JENKINS Parameterized Trigger Plugin 这会在 添加构建步骤
  • OpenGL 通过 FBO 渲染到纹理 -- 不正确的显示与正常纹理

    离屏渲染到纹理绑定的离屏帧缓冲区对象应该是微不足道的 但我遇到了一个问题 我无法理解 我的完整示例程序 目前仅限 2D 在这里 http pastebin com hSvXzhJT http pastebin com hSvXzhJT 请参
  • UICollectionView 用于 Xamarin.iOS 网格布局(MonoTouch)?

    我想知道是否有一个 UICollectionView 实现用于在网格中显示视图 图像 如下所示 我开始使用 UITableView 构建它 但是如果一个项目与其前任 后继项目不适合在同一行中 那么它会变得非常复杂 前几天我遇到了这个 这与你
  • Server单个端口(socket)最大并发连接数

    可以在同一端口 单套接字 上与服务器通信的并发客户端 使用不同端口号 的最大数量是多少 哪些因素可能影响这个计数 我正在 Linux 环境中寻找有关 telnet 的信息 这部分取决于您的操作系统 然而 对特定端口没有限制 然而 并发连接的
  • 多线程环境下什么是busy spin?

    什么是多线程环境下的 Busy Spin 它有什么用处以及如何在多线程环境中用java实现它 它以什么方式有助于提高应用程序的性能 其他一些答案忽略了忙碌等待的真正问题 除非您正在谈论一个您关心保存的应用程序电气功率 那么消耗 CPU 时间