是什么让 Erlang 适合软实时应用程序? [关闭]

2024-06-19

一些背景

我正在致力于构建一种用于数字媒体编程的编程语言,它应该支持使用非共享消息传递和软实时的并发性(即尽最大努力计算音频/视频而不会丢失样本或帧并具有恒定的吞吐量) 。

事实证明,这两个功能很难结合起来,主要是因为一个特定的限制:实时代码不应该动态分配内存。

我的语言应该可以很容易地实现这样的事情:

  • 一个线程根据参数计算音频样本。例如,这些可以是合成器的不同控件的值。该线程“实时”运行。
  • 一个线程接收来自用户或另一台计算机的输入以更改这些值。例如,这可能是 GUI 线程,对用户用鼠标转动旋钮做出反应。

我希望用户设置的新值通过队列发送到合成器引擎。现在,如果我只想发送浮点数和其他原子值,那么问题就不再有趣了。其实我想要any一种数据能够从一个线程流到另一个线程,甚至是复杂的对象或数据结构,并且这对于线程和优先级的任何配置都应该是可能的。如果没有实时方面的动态内存分配,如果不对程序员施加看似任意的限制,这将变得非常困难。

Erlang 经常被宣传为非常适合实时系统。然而,我的理解是,Erlang 从来不会禁止内存分配。如果我这样做,就会解决很多问题,但代价是在执行这些分配的代码中引入非确定性时序。

问题

那么,是什么让 Erlang 如此适合呢?它是否实现了特殊技巧来规避内存分配引起的问题,还是完全忽略了该问题?是否采用另一种实时方法?

举个例子来说明问题

假设我们正在用 Erlang 编写一个合成器,它必须每 50 毫秒产生 64 个样本,否则声音中就会出现裂纹和爆音。我们还假设,当我在字符串上移动某个滑块时,必须将一个小对象(假设它是一个包含参数名称和新值的列表或元组)从 GUI 进程发送到音频进程,其中副本已创建。这将需要动态内存分配。 Erlang 如何帮助我确保此分配不会延迟我的音频计算?


实时代码can动态分配内存,只是需要更加小心。

In real hard实时动态内存处理将成为在确定系统是否可以在分配的时间内完成其必须完成的任务时必须考虑的另一个因素。困难是最坏的情况。

In soft实时通常足以检查动态内存处理不会花费太多时间并导致太长的暂停。软是平均情况。

erlang 系统对于软实时应用程序来说非常出色,动态内存处理相当高效,并且通常不会导致任何明显的暂停。虽然它可能会介绍some非决定论这本身不应该给你带来任何问题。我的意思是,如果时间对您来说很重要,那么您无论如何都应该为应用程序计时,例如,以便音频样本按时“到达”。

erlang 是否适合您的应用程序语言是一个完全不同的问题。尚未真正优化的一件事是数值计算。 Erlang 当然可以做到这些,但它的速度远不及低级语言。它们通常对于使用 erlang 的应用程序类型并不重要。不过,还有 Wings 3D,这是一款开源细分建模器,其灵感来自 Izware 的 Nendo 和 Mirai,是用 erlang 编写的。所以一切并非毫无希望。 :-)

实际上,找出答案的唯一方法是编写一个小测试并尝试一下。另一个问题是詹姆斯提到的,你更喜欢使用哪种类型的语言?

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

是什么让 Erlang 适合软实时应用程序? [关闭] 的相关文章

  • 为什么我会得到以下结果? [复制]

    这个问题在这里已经有答案了 我做了以下测试 看看如何 PriorityBlockingQueue
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • Erlang Supervisor 重新启动与已关闭主机的连接的策略

    我使用 erlang 作为服务之间的桥梁 我想知道人们对处理断开的连接有什么建议 我正在从本地文件获取输入并将它们通过管道传输到 AMQP 可以想象 AMQP 代理可能会崩溃 对于这种情况 我想继续重试连接到 AMQP 服务器 但我不想将
  • Java 中具有可重入锁和条件的生产者消费者场景

    我使用可重入锁和条件编写了一个生产者消费者程序 它工作正常 但我不太确定实施是否正确 此外 它似乎不是最佳的 有人可以验证这是否是正确的实现 此外您能告诉我如何优化它 比如 在真正需要的地方锁定 public class TestRL st
  • 调用函数时Erlang“未绑定变量”

    我正在尝试将整数参数 N 传递给cake并返回一个大小为 N 的 2 的平方列表 为了示例 例如面包店 蛋糕 3 gt 4 4 4 这是我到目前为止所做的尝试 module bakery export cake 1 Foo fun X gt
  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 原子变量能保证内存可见性吗?

    关于内存可见性的小问题 代码示例1 class CustomLock private boolean locked false public boolean lock if locked locked true return true re
  • Erlang 中的静态类型检查

    我慢慢地爱上了 Erlang 但只有一个很大很大的问题 我非常喜欢 Standard ML 和 ocaml 等语言 它们具有强大的静态类型检查功能 有没有一种好的 干净的方法来在 erlang 中引入某种静态类型检查 我正在看 type a
  • Erlang++ 运算符。语法糖,还是单独操作?

    是Erlang的 运算符只是语法糖lists concat或者这是完全不同的操作 我试过搜索这个 但不可能通过谷歌搜索 并得到任何有用的东西 这就是如何lists concat 1在 stdlib lists 模块中实现 concat Li
  • Erlang dict的时间复杂度

    我想知道 Erlang OTP 是否dict模块是作为哈希表实现的 在这种情况下它是否能提供这样的性能 平均情况 Search O 1 n k Insert O 1 Delete O 1 n k 最坏的情况下 Search O n Inse
  • Java 有现成的时钟同步解决方案吗?

    我们有一个大型的高性能软件系统 它由多个交互的 Java 进程 不是 EJB 组成 每个进程可以在同一台机器上 也可以在不同的机器上 某些事件在一个进程中生成 然后以不同的方式传播到其他进程以进行进一步处理等 出于基准测试的目的 我们需要创
  • Java:高性能消息传递(单生产者/单消费者)

    我最初问这个问题here https stackoverflow com questions 3367192 java is while true loop in a thread bad whats the alternative 但我意
  • 是什么让 Erlang 适合软实时应用程序? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 一些背景 我正在致力于构建一种用于数字媒体编程的编程语言 它应该支持使用非共享消息传递和软实时的并发性 即尽最大努力计算音频 视频而不会丢失样本
  • ConcurrentBag 中可能存在内存泄漏吗?

    我一直在研究新的并发集合 特别是 ConcurrentBag 引起了我的注意 由于 ConcurrentBag 在每个单独的线程上内部保存一个本地集 使用它来跟踪项目 这意味着当线程本身超出范围时 ConcurrentBag 仍将在内存中引
  • 我可以获得当前加载的所有模块的列表吗?

    module info 会告诉我很多关于模块的信息 前提是我知道它的名称 我需要找到名称符合特定条件的所有模块 例如 companyname creator serialnumber 我记得在 erlang 存储此信息的地方读过 但我正在寻
  • 将数百万条记录写入 mnesia 表会占用大量内存(RAM),并且即使删除这些记录也不会回收

    我正在运行一个 Erlang 应用程序 它经常将数百万条记录写入 mnesia 表以创建调度程序 当时间到期时 记录将被执行并从表中删除 该表配置为 type disk copies type ordered set 我使用事务操作来写入
  • 在 Common Test 测试运行期间,Lager 调用失败

    我决定在我的 Erlang 项目中设置 lager 我正在使用 erlang mk 所以我添加了 ERLC OPTS parse transform lager transform 到我的 Makefile 我可以跑make all并编译模
  • 使用条件变量的 C++ 监视器类/包装器

    我正在尝试创建一个包装类W在 C 中 它是用指向通用对象的指针构造的OBJ 当您致电其中之一时OBJ方法通过W W 包含条件变量cv 发出一个cv wait 打电话之前OBJ方法和一个cv notify when OBJ方法已完成 我已经能
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 如何使用 Guava 连接字符串?

    我写了一些代码来连接字符串 String inputFile for String inputLine list inputFile inputLine trim 但我不能使用 连接 所以我决定使用 Guava 所以我需要使用Joiner
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 使用 IP 地址连接到另一台计算机

    我在计算机上安装了 NodeJS 并运行了一些测试 一切正常my机器 现在我想要一个不在同一网络中的朋友连接到我的计算机 以便 NodeJS 可以响应我朋友的请求 但我不知道 我必须在哪个IP和端口上监听 我也不知道 我必须给我的朋友哪个I
  • 为什么将 Ubuntu 升级到 22.04 后 phpMyAdmin 停止工作?

    刚刚升级到 Ubuntu 22 04 现在我的 phpmyadmin 无法加载 我收到以下错误 解析错误 语法错误 usr share php Symfony Component DependencyInjection ContainerB
  • 自动生成PHP代码的策略?

    我正在开发一个框架 在后端创建 ER 图后 该框架可以动态地对自身的各个部分进行编程 作为一名 PHP 新手 我想知道是否还有比打开一个纯 xyz php 文本文件然后将动态生成的代码添加到该文件更奇特的事情 是的 尝试一下Zend Cod
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • mysql 中的二进制、十六进制和八进制值

    我对在 mysql 数据库中使用二进制 十六进制和八进制系统非常感兴趣 首先 请给我一个建议 为什么我们在存储信息时需要它们 因为信息太多 或者为什么 另外 哪种类型的值必须存储在标记系统中 另外这里还有像 这是例子 gt SELECT 5
  • AngularJS 输入字段未从控制器内的 setTimeout 更新

    我正在使用 AngularJS 支持的页面 并且我需要在只读输入文本字段内显示正在运行的时钟 与data ng model 为了模拟运行的时钟 我使用了 JavaScript 调度程序setTimeout每 1000 毫秒调用一个函数 该函
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 用于表示过滤的漏斗的 Unicode 字符

    是否存在在常见计算机操作系统上广泛使用的表示过滤 例如漏斗 的 unicode 字符 到目前为止我发现的一些最相似的字符 Y V
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • Android - 主页按钮发出什么意图?

    我想知道设备的主页按钮到底执行什么操作 即 当您单击主页按钮时会发出什么意图 意图类别和操作 回到空白的主屏幕 我想知道在单击我自己的自定义按钮时实现此操作涉及什么 谢谢 PS我知道这不是标准的 但我的设备也不是 如果您想显示主屏幕 可以通
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 是什么让 Erlang 适合软实时应用程序? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 一些背景 我正在致力于构建一种用于数字媒体编程的编程语言 它应该支持使用非共享消息传递和软实时的并发性 即尽最大努力计算音频 视频而不会丢失样本