Erlang 如何并发处理访问邮箱

2024-04-26

关于如何使用erlang邮箱的信息有很多,但很少找到一篇论文或文档描述erlang如何在VM内部同时实际访问邮箱。

据我了解,Erlang VM 必须执行锁定或 CAS 操作以确保消息完整性。 erlang幕后有没有什么精巧的方法


我假设您所说的邮箱是指进程邮箱,即插入一条消息的邮箱。有趣的问题!

有一些对话here http://erlang.2086793.n4.nabble.com/Lock-free-message-queue-td2550221.html关于Erlang进程消息队列的锁定特性:

只是好奇:目前发送消息时存在某种锁定。 有没有人尝试过实现无锁链表:http://www.amd64.org/fileadmin/user_upload/pub/epham08-asf-eval.pdf http://www.amd64.org/fileadmin/user_upload/pub/epham08-asf-eval.pdf

或者我只是看错了地方,而 erts_smp_proc_lock 已经存在 使用这样的东西?

消息队列已经有这个了。拥有该进程的进程 消息框有一个“内框”,他有一个锁,还有一个“外框” 所有发送者都竞争的“盒子”。因此锁争用发生在 当大量进程发送到时,“外部盒子”上的队列尾部 那个过程。不过,邮箱所有者并不关心此事。

您可能会发现阅读光束工艺 https://github.com/erlang/otp/blob/maint/erts/emulator/beam/erl_process.c说明性的。

简短的回答:是的,锁定是在消息队列上完成的,但是它很复杂并且经过优化以减少调度程序线程之间的争用。

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

Erlang 如何并发处理访问邮箱 的相关文章

  • Java 空值检查

    我有一个thread1 if object null object play 和另一个thread2可以写null into object随时参考 我将同时运行这些线程 我知道thread2可以重写object后参考null检查并会抛出Nu
  • 如何在erlang中读取mnesia数据库的所有记录?

    我是 erlang 新手 我需要对从 mnesia 数据库获取的所有记录进行一些操作 Result mnesia dirty read mydatabase key1 key2 case Result of gt DEBUG No such
  • .NET 或 Windows 同步原语性能规范

    我目前正在写一篇科学文章 我需要非常准确地引用 有人可以向我指出 MSDN MSDN 文章 一些已发表的文章来源或一本书 我可以在其中找到 Windows 或 NET 同步原语的性能比较 我知道这些是按性能降序排列的 互锁 API 关键部分
  • Scala 中用于阻止调用的 Future

    The Akka文档说 you may be tempted to just wrap the blocking call inside a Future and work with that instead but this strate
  • 如何使用固定数量的工作线程实现简单线程

    我正在寻找最简单 最直接的方法来实现以下内容 主程序实例化worker 执行任务的线程 Only n任务可以同时运行 When n已达到 不再有工人 开始直到计数 正在运行的线程回落到下方n 我觉得Executors newFixedThr
  • 是否可以保证 WaveFront (OpenCL) 中的所有线程始终同步?

    众所周知 有WARP 在CUDA中 和WaveFront 在OpenCL中 http courses cs washington edu courses cse471 13sp lectures GPUsStudents pdf http
  • LinkedBlockingQueue 抛出 InterruptedException

    我有这段代码 ALinkedBlockingQueue应该只抛出一个Exception如果在等待添加到队列时被中断 但这个队列是无限的 所以它应该尽快添加 为什么我的关闭方法会抛出一个InterruptedException private
  • 我的代码线程不安全吗?

    我编写了代码来理解 CyclicBarrier 我的应用程序模拟选举 每轮选出得票少的候选人 该候选人从竞争中淘汰以获得胜利 source class ElectoralCommission public volatile boolean
  • Erlang:binary_to_atom 填充atom 表空间安全问题

    我听说 Erlang 中的原子表可能会被填满 从而使系统对 DDoS 开放 除非您增加可以创建的原子数量 看起来 binary to existing atom 2 就是这个问题的解决方案 谁能准确解释一下如何是否存在安全隐患以及如何解决这
  • Erlang 中的函数链

    最好创建像 Active Record 或 Hibernate 这样的 ORM 它应该像这样处理链式查询 User User new for login stackoverflow admin for password 1984 load
  • 在 Erlang 中是否有一种惯用的方法来对函数参数进行排序?

    似乎列表模块中的不一致 例如 split 将数字作为第一个参数 将列表作为第二个参数 而 sublists 将列表作为第一个参数 将 len 作为第二个参数 好的 讲一下我记得的一些历史以及我的风格背后的一些原则 正如克里斯蒂安所说 图书馆
  • 如何将非并行junit参数化测试转变为并行运行

    我编写了一个参数化的junit测试 有没有任何内置方法可以使其并行运行 任何 annoation例如 如果没有 我唯一的方法就是手动编写 你会如何管理junit java中的线程池 图书馆JUnit工具箱 https github com
  • python 的 fcntl.flock 函数是否提供文件访问的线程级锁定?

    Python 的 fcnt 模块提供了一种名为 flock 1 的方法来证明文件锁定 其描述如下 对文件执行锁定操作op 描述符 fd 文件对象提供 fileno 方法被接受为 出色地 请参阅 Unix 手册集群 2 了解详情 在某些系统上
  • gen_server中的数据在supervisor重启后还会保留吗?

    我有一个启动许多 gen server 的主管 每个 gen server 都有大量的数据加载 这需要花费大量的时间 我想知道当错误发生时 存储在 gen server 状态及其进程字典中的数据是否会保留以供下次启动 这样我就不需要再次初始
  • 在多线程程序中使用 EF 有什么好的建议吗?

    您对于在多线程程序中使用 EF 有什么好的建议吗 我有两层 用于读 写数据库的 EF 层 一个多线程服务 它使用我的实体 读 写 并进行一些计算 我在框架中使用任务并行库 如何同步每个线程中的对象上下文 您知道让它发挥作用的好模式吗 好的建
  • C 中的互斥锁/锁:C11 `mtx_lock()` 与 `pthread_mutex_lock()`

    互斥体直到 C11 才被引入 C 标准 对吗 既然它们已经存在 那么人们应该使用哪一个或更喜欢哪一个 以及何时使用 为什么 有什么区别 C11 s mtx lock vs pthread mutex lock C11 s mtx lock
  • Erlang:有“epmd”的 API 吗?

    有没有办法查询 epmd 守护进程管理的名称表 The nodes 函数在这方面不是很有帮助 注意 我正在寻找 APIaside解析通过 stdout 生成的输出 要查询 epmd 可见的节点 请调用 EpmdModule net kern
  • 何时在多线程中使用 易失性?

    如果有两个线程访问全局变量 那么许多教程都说使该变量成为易失性的 以防止编译器将变量缓存在寄存器中 从而无法正确更新 然而 两个线程都访问共享变量需要通过互斥体进行保护 不是吗 但在这种情况下 在线程锁定和释放互斥体之间 代码位于关键部分
  • 原子变量能保证内存可见性吗?

    关于内存可见性的小问题 代码示例1 class CustomLock private boolean locked false public boolean lock if locked locked true return true re
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn

随机推荐