减慢线程速度的最佳方法?使用 Sleep() 可以吗?

2024-02-17

我编写了一个 C++ 库,它执行一些非常繁重的 CPU 工作(所有数学和计算),如果留给它自己的设备,将很容易消耗 100% 的所有可用 CPU 资源(它也是多线程的,以达到可用逻辑的数量)机器上的核心)。

因此,我在使用该库的软件应该调用的主计算循环内有一个回调:

while(true)
{
    //do math here
    callback(percent_complete);
}

在回调中,客户端调用 Sleep(x) 来减慢线程速度。

最初,客户端代码是固定的 Sleep(100) 调用,但这会导致性能不可靠,因为有些机器比其他机器更快地完成数学运算,但所有机器上的睡眠都是相同的。所以现在客户端检查系统时间,如果已经过去超过 1 秒(这 == 几次迭代),它将休眠半秒。

这是减慢线程速度的可接受的方法吗?为了最大限度地提高性能,我应该使用信号量/互斥量而不是 Sleep() 吗?每 1 秒的处理睡眠 x 毫秒是否正常,还是有什么问题我没有注意到?

我问的原因是,尽管 Taskman 显示该进程占用了约 10% 的 CPU,但机器仍然严重陷入困境。我已经探索了硬盘和内存争用,但没有成功,所以现在我想知道我减慢线程速度的方式是否导致了这个问题。

Thanks!


为什么不为计算线程使用较低的优先级?这将确保调度其他线程,同时在不需要运行其他线程的情况下允许计算线程尽可能快地运行。

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

减慢线程速度的最佳方法?使用 Sleep() 可以吗? 的相关文章

  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • glGetString 和 glGetShaderInfoLog 等函数使用什么编码

    OpenGL有一些功能 例如glGetString and glGetShaderInfoLog返回字符串 这些使用什么形式的文本编码 我认为 鉴于它们作为GLchar 它是返回值中包含的 ASCII 编码文本 但这是否在任何地方指定 作为
  • Flutter守护进程启动失败

    我每次打开时都会收到此警告VS code 有什么办法可以解决这个问题吗 谢谢 我添加了这个警告的日志 我努力了扑干净 and 扑医生一切都很好 但是每次我打开 VS Code 时仍然出现此警告 我还遇到了一个问题 VS Code 显示没有设
  • 实体框架 Linq 等于值或为 null

    我正在尝试使用 linq 从视图中获取项目列表 其中字段 LocationId 为值或为 null LocationId 字段是 int 我正在尝试的代码是这样的 var items context Items Where d gt d L
  • 每个工人的最大日期

    考虑两个表 工作表有如下字段W ID W Name 课程表有如下字段C ID C Name C Date 一个工人可以选修多门课程 一门课程也可以由许多工人选修 因此 两个表之间存在多对多关系 打破多对多 并创建一个名为 Takes 的新表
  • 如何调整 IntelliJ 中行尾的位置

    在 IntelliJ 中 就像在 Eclipse 中一样 代码编辑器中有一条细灰色垂直线 我假设就像在 Eclipse 中一样 该行显示了 行尾 应该在的位置 2个问题 1 在IntelliJ中哪里可以调整一行的长度 2 如果不使用与 1
  • React-Router:使用 Navlink 将道具从一个组件传递到另一个组件

    我在用
  • 如何通过svelte访问本地json文件?

    现在我使用 onMount 异步函数来访问 const dataAPI jsfwperf json let data onMount async gt const res await fetch dataAPI then res gt re
  • 在浏览器中使用模块(没有 WebPack)

    我正在摸索 ES6 的过程 遇到了模块 很好 在学习过程中 我试图看看是否可以在浏览器中使用它们withoutWebPack 我还没学过 所以 我的 JS 目录中有以下文件 文件夹结构 js lib for complied es6 via
  • 如何在单个android应用程序中正确导入多个unity模块,避免android studio中不同unity模块之间的名称冲突?

    我已经导入了两个统一模块 三角形模块和立方体模块 public class MainActivity extends AppCompatActivity Override protected void onCreate Bundle sav
  • 通过 crypto-js 的 base64 编码器

    我想将数字编码为字符 如何在输出中编码为 Base64 Code const CryptoJS require crypto js function msg return 7543275 I want to encrypt this num
  • Docker Compose 和 Kubernetes 有什么区别?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 在深入研究 Docker Google Cloud 和 Kubernetes 时 如果还
  • logd 快捷方式在 Intellij 和 Kotlin 中不起作用

    使用 logt logd loge 等快捷方式在 Intellij 中记录 Java 非常简单 但我搬到了 Kotlin 我注意到这些快捷方式不再起作用了 我不知道这是否与我的配置有关 如果不是 我该如何解决这个问题 您应该创建单独的模板以
  • 让应用程序布局与 Bootstrap 4 页面配合使用

    我使用的是 Domino 9 0 1 并成功安装了 Bootstrap Library 1 0 0 201403171254 在应用程序配置 Xsp 属性 常规下 我将主题设置为 bootstrapv3 1 1 并在应用程序配置 Xsp 属
  • 页面刷新后保留值

    我在 C 中使用按钮控件 验证按钮 我在我的项目中定义了一些全局变量 当我单击该按钮时 会发生一些表单验证 并且另一个按钮 保存按钮 可见 问题是当我单击验证按钮时 当前页面刷新并且全局变量不包含值 它显示为空 即使在页面刷新后 我如何维护
  • 序列化性能和 Google Android

    我正在寻找加快序列化性能的建议 特别是在使用 Google Android 时 对于我正在从事的一个项目 我试图将数百个对象从服务器中继到 Android 应用程序 并经历各个阶段以获得我需要的性能 首先 我尝试了一个糟糕的 XML 解析器
  • 用于注册和忘记密码的不同电子邮件验证消息

    使用 AWS 的 Cognito 可以获得很多好处 因为大多数功能 如果不是全部 已经由 AWS 实现 但我遇到了一种情况 我不确定如何使用 Cognito 来实现 考虑以下两种情况 Sign up 用户通过提供电子邮件和密码进行注册 将向
  • 哪些字符可以作为使用 Esprima 的 JavaScript 中的运算符?

    From 以前的 https stackoverflow com q 20762338 1420197问题 我学会了如何扩展 JavaScript 语言以支持更多运算符 由我创建 There Benjamin 使用 Esprima 并创建了
  • 我应该使用 std::begin 与数组吗?

    作为一个简单的例子 看一下这段代码 或者想象一下特定于数组的代码而不是模板和其他通用编码技术 int a 1 2 3 7 8 9 55 vector
  • 如何使用 $location 服务对 angularjs 控制器进行单元测试

    我正在尝试创建一个简单的单元测试来测试我的显示功能 我收到以下错误 TypeError Object has no method show 这好像是 rootScope不是控制器的范围吗 这是我的控制器 function Opponents
  • 减慢线程速度的最佳方法?使用 Sleep() 可以吗?

    我编写了一个 C 库 它执行一些非常繁重的 CPU 工作 所有数学和计算 如果留给它自己的设备 将很容易消耗 100 的所有可用 CPU 资源 它也是多线程的 以达到可用逻辑的数量 机器上的核心 因此 我在使用该库的软件应该调用的主计算循环