我的线程可以帮助操作系统决定何时将其上下文切换吗?

2024-04-05

我正在 Linux 上用 C++ 开发一个线程应用程序,它试图实现实时,根据心跳执行操作,或者尽可能接近实时。

在实践中,我发现操作系统正在交换我的线程,并导致切换时延迟长达十分之一秒,从而导致心跳不规则。

有没有一种方法可以让我的线程向操作系统暗示现在是上下文切换的好时机?我可以在进行心跳后立即进行此调用,从而最大限度地减少由于不合时宜的上下文切换而导致的延迟。


很难说你的情况的主要问题是什么,但它肯定不是可以通过调用来纠正的问题sched_yield() or pthread_yield()。在 Linux 中,yield 的唯一明确定义的用途是允许不同的就绪线程在 SCHED_FIFO 调度策略下,在同一 CPU 上以相同优先级抢占当前 CPU 绑定的正在运行的线程。几乎在所有情况下这都是一个糟糕的设计决策。

如果您认真对待 Linux 中“尝试实时”的目标,那么首先,您应该使用实时sched_setscheduler设置(SCHED_FIFO 或 SCHED_RR,优先使用 FIFO)。 其次,获取 Linux 的完整抢占补丁(来自内核.org http://www.kernel.org/pub/linux/kernel/projects/rt/如果您的发行版不提供这一功能。它还使您能够重新安排设备驱动程序线程并执行高于硬盘或以太网驱动程序线程的线程。 三、看RTWiki https://rt.wiki.kernel.org/index.php/Main_Page以及其他资源,了解有关如何设计和设置实时应用程序的更多提示。

这应该足以让你的年龄低于 10 岁micro秒响应时间,无论任何像样的桌面系统上的系统负载如何。我有一个嵌入式系统,我只挤出 60 us 响应空闲时间和 150 us 在重磁盘/系统负载下的响应时间,但它仍然比您所描述的快几个数量级。

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

我的线程可以帮助操作系统决定何时将其上下文切换吗? 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • POSIX 线程和 SIGSEGV

    我的系统有 10 多个线程 我有一个信号处理程序来捕获 SIGSEGV 如果一个线程生成 SIGSEGV 该信号是否会发送到所有线程 还是仅发送到生成该信号的线程 SIGSEGV是同步信号 它将被传递到导致无效内存访问的线程 从signal
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少

随机推荐

  • 在 C 编译时检查类型是结构体还是指针?

    注意 这是NOTPaul T 链接的问题的重复项 因为我问是否可以在编译时确定类型是否属于某种更广泛的不完整类型 种类 而不是在编译时是否已注册符号 这似乎是对这个问题的根本误解 我正在用 C 编写一个库 该库处理伪通用函数 该函数通过宏包
  • 水平滚动时保持树视图最左边的列可见

    我使用 ControlTemplate 和 GridViewRowPresenter 的堆栈面板在 WPF 中实现了带有列的树视图 我关注了这篇文章 http blogs msdn com b atc avalon team archive
  • 通过 Javascript 代码单击 HTML 表单的提交按钮

    我对WEB编程不太了解 所以请随时询问我是否遗漏了任何细节 有一个我经常访问的网站 它要求用户每次访问时都需要登录 对于这个网站的登录页面 我试图写下一个用户脚本 它将自动登录 我设法填写了表单字段 但不知道如何通过 JavaScript
  • 在 RESTful html 应用程序中将表单/替代视图放在哪里?

    我们假设一个 Web 应用程序为每个 URI 提供一个用于 GET 请求的漂亮 html 视图 并允许通过 POST PUT PATCH WHATEVER 更新底层资源 然后 我如何公开实际上允许从浏览器执行此类请求的各种表单 更广泛的是
  • Rails 4:.save 不会更新现有记录的updated_at?

    我一直以为 save and save 将更新updated at现有记录列 这不是真的吗 如果是这样 那么我是否需要创建一个 before save 过滤器以在每次保存时更新它 今天是 6 月 18 日 Loading developme
  • 求解具有可压缩质量守恒的一维纳维斯托克斯问题(液压阻尼器)

    I would like to solve a 1D Navier equation on a cylindrical imposed tubes cartesian cordinates 流动沿 y 方向 右室压力 p1 和左室压力 p2
  • Cordova:找不到plugin.xml

    我正在尝试从我的 coordova 文件中删除此插件 但遇到了此问题 Error Cannot find plugin xml for plugin org apache cordova file transfer Please try a
  • 超出最大调用堆栈大小。在对话框中打开

    在我的项目中 我有一个对话框 显示两个按钮 确认和取消 操作 但是 当出现这种情况时 如果我移动或单击具有与我关联的功能的按钮 则会导致此错误 未捕获的范围错误 超出最大调用堆栈大小 这是显示对话框的函数 displayConfirmMes
  • 受保护的内部类在类内工作但不在类外工作

    我尝试了一些事情 想知道为什么会这样 假设我在命名空间 n 中有一个名为 A 的类 我试图创建受保护的内部类 B namespace n public class A public A protected internal class B
  • 使用 Mockito 动态返回值

    通常在编译时定义 Mockito 模拟的返回值 即静态地 MyClass myClass Mockito mock MyClass class when myClass myMethod thenReturn 0 100 200 有没有办法
  • 查找具有其他字符串的所有字符的子字符串的最小长度的算法

    我有两个字符串 字符串1 hello how are you 字符串2 olo 包括空格字符 Output lo ho hello ho你是谁 lo ho是唯一包含 string2 的所有字符的子字符串 任何人都可以为此提出一个好的算法 我
  • 什么是 AWT-Windows 线程?

    当我使用 AWT 时 在调用Toolkit getDefaultToolkit 我已经打印了程序中当前正在运行的线程 我想知道那是什么AWT Windows在后台运行的线程 它有什么作用以及为什么有6优先事项 另外 该行 Thread AW
  • 动态句子中的单词倒序

    我有几个这样的标签 a class classCover href 1 Comment a 我想颠倒一下单词的顺序 Comments 1 我的功能是这样的 但不起作用 classCover each function this text s
  • HSQLDB / Spring 单元测试不回滚

    我正在使用 Spring 的嵌入式数据库 默认数据库是 HSQLDB 来运行一些单元测试 我的情况如下
  • 无权在 mongodb 上查询 admin.system.namespaces

    我启动一个新的 mongo 实例 创建一个用户 对其进行授权 但是当我运行 show collections 时 系统说该 id 未授权 我不知道为什么 mongo admin MongoDB shell version 2 4 3 con
  • 将 Autofac 添加到 WPF MVVM 应用程序

    我似乎无法找到解决这个问题的方法 我已经看到了几个与此相关的问题 但没有一个真正给我解决方案 我对 Autofac 完全陌生 并没有真正做过太多 WPF MVVM 但了解基础知识 我有一个 WPF 应用程序 使用 ModernUI for
  • ASP.NET Core MVC 相当于启动操作特定页面

    In ASP NET Webforms or ASP NET MVC项目中 我可以在按F5进行调试时选择浏览器中正在调用的页面 路由 如下图所示 相当于什么ASP NET Core MVC 我在用着IIS Express with SSL用
  • 错误:如果没有列“date_time”(在分区中使用),则无法创建唯一索引

    我刚开始使用时间刻度数据库 https www timescale com 与 postgresql 我有一个名为storage db其中包含一个名为day ahead prices 安装 timescaledb 后 我正在关注从同一个 p
  • angularjs从json文件中获取ng-repeat数据非常慢

    我有一个 json 文件 其中包含大约 8000 个联系人 使用 ng repeat 使用 angularjs 获取所有数据需要很长时间 有解决办法吗 检索如此大的记录时 您不能期望有很高的速度 您可以使用以下方法优化 ng repeat
  • 我的线程可以帮助操作系统决定何时将其上下文切换吗?

    我正在 Linux 上用 C 开发一个线程应用程序 它试图实现实时 根据心跳执行操作 或者尽可能接近实时 在实践中 我发现操作系统正在交换我的线程 并导致切换时延迟长达十分之一秒 从而导致心跳不规则 有没有一种方法可以让我的线程向操作系统暗