问题标签 [real-time]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
30 回答
26240 浏览

c++ - 用于实时图形编程的 C++ 的最佳替代方案是什么?

C++ 让我对自己的内存进行微观管理,让我输入太多(你好std::vector<Thingy>::const_iterator it = lotsOfThingys.begin()),并让我长时间编译感到厌烦,这让我浪费了太多时间。对于严肃的实时图形编程来说,最好的选择是什么?垃圾收集是必须的(必要时避免使用它的能力也是如此),而且速度必须与 C++ 相媲美。访问 C 库的合理故事也是必须的。

(完全披露:我对此有自己的答案,但我很想看看其他人发现什么可以替代 C++ 用于实时图形工作。)

编辑:感谢大家的周到答复。鉴于这个问题确实没有“正确”的答案,我不会选择任何特定的答案。此外,我只是选择我碰巧喜欢的语言作为 C++ 的替代品,这并不公平。

0 投票
10 回答
3543 浏览

linux - 对 SD/USB 的突发写入使我在嵌入式 Linux 上的时间关键型应用程序停滞不前

我正在开发一个嵌入式 Linux 项目,该项目将 ARM9 连接到硬件视频编码器芯片,并将视频写入 SD 卡或 USB 记忆棒。软件架构涉及将数据读取到缓冲区池中的内核驱动程序,以及将数据写入已安装可移动设备上的文件的用户级应用程序。

我发现在超过一定的数据速率(大约 750kbyte/sec)时,我开始看到用户级视频编写应用程序停止大约半秒,大约每 5 秒。这足以导致内核驱动程序耗尽缓冲区——即使我可以增加缓冲区的数量,视频数据也必须与其他实时发生的事情同步(最好在 40 毫秒内)。在这 5 秒的“滞后峰值”之间,写入在 40 毫秒内完成(就应用程序而言 - 我很欣赏它们被操作系统缓冲)

我认为这个延迟峰值与 Linux 将数据刷新到磁盘的方式有关——我注意到 pdflush 被设计为每 5 秒唤醒一次,我的理解是这就是写作的目的。一旦停顿结束,用户态应用程序就能够快速服务并写入缓冲区的积压(没有溢出)。

我认为我正在写入的设备具有合理的最终吞吐量:从内存 fs 复制 15MB 文件并等待同步完成(并且 USB 棒的指示灯停止闪烁)给了我大约 2.7MBytes/sec 的写入速度。

我正在寻找两种线索:

  1. 我怎样才能阻止突发性写入停止我的应用程序——可能是进程优先级、实时补丁或调整文件系统代码以连续写入而不是突发性写入?

  2. 如何让我的应用程序知道文件系统在写入积压和卡/棒的吞吐量方面发生了什么?我有能力动态更改硬件编解码器中的视频比特率,这比丢帧或对最大允许比特率施加人为上限要好得多。

更多信息:这是一个 200MHz ARM9,当前运行基于 Montavista 2.6.10 的内核。

更新:

  • 挂载文件系统 SYNC 会导致吞吐量太差。
  • 可移动媒体为 FAT/FAT32 格式,设计目的必须是媒体可以插入任何 Windows PC 并读取。
  • 定期调用 sync() 或 fsync() 说,每秒都会导致定期停顿和不可接受的低吞吐量
  • 我正在使用 write() 和 open(O_WRONLY | O_CREAT | O_TRUNC) 而不是 fopen() 等。
  • 我无法立即在网上找到有关上述“Linux 实时文件系统”的任何信息。链接?

我希望这是有道理的。关于stackoverflow的第一个嵌入式Linux问题?:)

0 投票
13 回答
2078 浏览

real-time - 什么是“实时”

我无法决定是否将我的应用程序分类为“实时”或“接近实时”,或者甚至是其他的。

该软件在从源生成数据时立即接收数据,然后根据某些规则,在满足某些条件时发出警报。它采用每 30 秒检查最后 30 秒数据的方法,以查看是否满足规则的条件。

那是实时的吗?实时与近实时的定义阈值是什么?

编辑

我认为这是在 web 上为业务定义实时的副本。

请确定上述线程是否不足以回答您的问题。

0 投票
13 回答
26682 浏览

c# - 如何避免实时 .NET 应用程序中的垃圾收集?

我正在编写一个金融 C# 应用程序,它从网络接收消息,根据消息类型将它们转换为不同的对象,最后在它们上应用应用程序业务逻辑。

关键是在应用了业务逻辑之后,我很确定我再也不需要这个实例了。我不想等待垃圾收集器释放它们,而是明确地“删除”它们。

在 C# 中是否有更好的方法可以做到这一点,我应该使用对象池来重用相同的实例集还是有更好的策略。

目标是避免垃圾收集在时间关键的过程中使用任何 CPU。

0 投票
7 回答
392 浏览

c - 将数据添加到闪存中的段如何会破坏程序的时序?

我有一个实时嵌入式应用程序,主要周期以 10KHz 运行。它在配置为从闪存启动的 TI TMS320C 上运行。我最近在一个源文件中添加了一个初始化数组,突然之间时间被搞砸了(以一种太复杂的方式无法很好地解释——本质上串行端口写入不再按时完成。)

这件事让我感到困惑:

  • 什至没有访问新数据,只是声明了一个初始化数组。
  • 它取决于大小 - 仅当数组大于 40 个字时才会出现问题。
  • 我知道我没有溢出链接图中的任何数据段。
  • 没有数据缓存,因此不是由于破坏了缓存一致性。

关于如何简单地增加闪存中 .cinit 段的大小会影响代码的时序的任何想法?

附加信息:
我认为代码可能已经移动,但它与数据分离良好。我通过内存映射验证了所有代码段在错误之前和之后都具有相同的地址。我还验证了没有一个段是完整的 - 地图中唯一更改的地址是 .cinit 部分中的少数。该部分包含用于初始化 ram 中的变量的数据值(如我的数组)。在 main() 被调用后,它不应该被访问。

0 投票
4 回答
346 浏览

performance - 提高实时系统的性能

首先,我想确定金融界实时系统可接受的端到端延迟小于 200 毫秒。好的,这就是我所追求的。在实时系统的设计中,有一些“设计模式”(或技术)可以提高性能(即减少处理时间、提高可伸缩性等)。

我所追求的一个例子是,使用 GUID 而不是序号来分配主键。GUID 的基本原理是处理程序拥有自己的主键生成器,而无需相互“协商”。这允许发生并行处理并允许缩放。

这里还有一些。我会尽量添加到列表中。

我向社区的集体智慧低头。多谢!

0 投票
4 回答
284 浏览

real-time - 大量数据的第三方数据交付

有谁知道拥有大量数据实时馈送的网站是如何工作的?我指的是股票网站之类的东西,他们可以在其中实时告诉您(嗯,主要是 20 分钟的延迟,但仍然是实时的——据我所知是 20 分钟)。

他们每秒都有成千上万的数据块交付给他们,我想:MSFT 25.00 +.23 VOL 12000 ???? 对于在某个时间间隔内发生变化的每只股票。

那么,是否只有不断的小推动?还是您认为网站会从拥有真实数据的地方拉出并说“给我从 CST 12:23:45 到现在的所有更改”类型查询?

我问这个是因为在工作中我们可能会遇到这样的情况,我们需要在我们的应用程序的指尖获得这样的实时信息,并且每秒一遍又一遍地点击我们的第三方提供商是没有意义的......

0 投票
8 回答
18539 浏览

linux - Linux 中微秒级精确(或更好)的进程计时

我需要一种非常准确的方法来计时我的程序的某些部分。我可以为此使用常规的高分辨率时钟,但这会返回挂钟时间,这不是我需要的:我需要只运行我的进程所花费的时间。

我清楚地记得看到一个 Linux 内核补丁,它可以让我将我的进程计时到纳秒精度,除了我忘记给它添加书签并且我也忘记了补丁的名称:(。

我记得它是如何工作的:

在每次上下文切换时,它会读取一个高分辨率时钟的值,并将最后两个值的增量添加到正在运行的进程的进程时间。这产生了过程的实际过程时间的高分辨率准确视图。

常规处理时间使用常规时钟保持,我相信这是毫秒级的(1000Hz),这对于我的目的来说太大了。

有谁知道我在说什么内核补丁?我还记得它就像一个单词,在它之前或之后有一个字母——比如“rtimer”之类的东西,但我不记得确切了。

(也欢迎其他建议)


Marko 建议的完全公平调度器不是我想要的,但它看起来很有希望。我遇到的问题是我可以用来获取处理时间的调用仍然没有返回足够细化的值。

  • times() 以毫秒为单位返回值 21、22。
  • clock() 返回值 21000、22000,粒度相同。
  • getrusage() 正在返回诸如 210002、22001 (和类似的)之类的值,它们看起来有更好的准确性,但这些值看起来明显相同。

所以现在我可能遇到的问题是内核有我需要的信息,我只是不知道将返回它的系统调用。

0 投票
7 回答
11199 浏览

linux - SD卡写入性能

我正在编写一个小应用程序,它以恒定速率在 SD 卡上写入 jpeg 图像。我选择了 EXT3 文件系统,但使用 EXT2 文件系统观察到了相同的行为。

我的写作循环如下所示:

或者像这样:

我还显示了一些计时统计信息,我可以看到我的程序有时被阻塞了几秒钟。平均速率还是不错的,因为如果我将传入的图像保持在一个 fifo 中,那么我会在这样的停顿后的短时间内写入很多图像。你知道这是操作系统的问题还是与SD卡本身有关?我怎样才能更接近实时?我不需要强大的实时性,但是停滞几秒钟是不可接受的。

一些精度:是的,有必要在每个文件之后进行 fsync,因为我希望图像在磁盘上,而不是在某些用户或内核缓冲区中。没有 fsyncing,我的直通输出要好得多,但仍然是不可接受的停顿。我认为这不是缓冲区问题,因为第一次停顿发生在写入 50 MB 之后。根据手册页, fsync 正是为了确保没有缓冲数据。

关于平均写入速率的精度:我正在以我正在使用的卡可持续的速率写入。如果我在等待 fsync 完成时堆积传入的图像,那么在这个停顿之后,写入传输速率会增加,我会很快回到平均速率。平均传输速率约为 1.4 MBytes / s。

systeme 是运行 ubuntu 8.04 和 stock kee (2.6.24.19) 的现代笔记本电脑

0 投票
7 回答
527 浏览

ajax - 跨平台丰富的用户界面开发有哪些可用的选项?

这种 ui 框架/工具包的一些要求(限制)是:

  • 没有单一供应商锁定
  • 实时数据可视化能力
  • 良好的初始小部件
  • 良好的仪表板功能
  • 跨平台
  • 良好的开发/调试环境
  • 无闪光灯