什么样的 Lua 多线程包在发布时“正常工作”?

2024-01-25

在 Lua 中编码时,我有一个三重嵌套循环,经过 6000 次迭代。所有 6000 次迭代都是独立的,并且可以轻松并行化。 Lua 封装了哪些线程开箱即用编译 and 获得不错的并行加速在四个或更多核心上?

到目前为止我所知道的是:

  • luaproc http://www.inf.puc-rio.br/~roberto/docs/ry08-05.pdf来自核心 Lua 团队,但是 luaforge 上的软件包很旧,并且邮件列表中有关于它出现段错误的报告。另外,对我来说,如何使用标量消息传递模型将结果最终传递到父线程中并不明显。

  • 卢阿巷 http://kotisivu.dnainternet.net/askok/bin/lanes/提出了有趣的主张,但似乎是一个重量级、复杂的解决方案。邮件列表上的许多消息都报告了 Lua Lanes 为他们构建或工作时遇到的困难。我自己在让底层的“Luarocks”分配机制为我工作时遇到了麻烦。

  • Lua线程 http://www.cs.princeton.edu/~diego/professional/luathread/需要显式锁定,并要求线程之间的通信由受锁保护的全局变量来调解。我可以想象更糟糕的情况,但如果有更高的抽象水平我会更高兴。

  • 并发Lua https://github.com/lefcha/concurrentlua提供了一个类似于 Erlang 的有吸引力的消息传递模型,但它表示进程不共享内存。目前还不清楚是否spawn实际上与anyLua功能是否有限制。

  • 拉斯·考克斯提出了一个偶尔穿线 http://lua-users.org/lists/lua-l/2006-11/msg00368.html仅适用于 C 线程的模型。对我来说没用。

我将投票支持所有报告的答案实际体验与这些或任何其他多线程包,或任何提供新信息的答案。


作为参考,这是我想要并行化的循环:

for tid, tests in pairs(tests) do
  local results = { }
  matrix[tid] = results
  for i, test in pairs(tests) do
    if test.valid then
      results[i] = { }
      local results = results[i]
      for sid, bin in pairs(binaries) do
        local outcome, witness = run_test(test, bin)
        results[sid] = { outcome = outcome, witness = witness }
      end
    end
  end
end

The run_test函数作为参数传入,因此只有当包可以并行运行任意函数时,它才对我有用。我的目标是足够的并行性,以便在 6 到 8 个核心上获得 100% 的 CPU 利用率。


Norman 写到关于 luaproc 的内容:

“对我来说,如何使用标量消息传递模型将结果最终传递到父线程中并不明显”

我在处理的用例中遇到了同样的问题。我喜欢 lua proc,因为它的实现简单且轻便,但我的用例有调用 lua 的 C 代码,它触发了一个需要发送/接收消息以与其他 luaproc 线程交互的协同例程。

为了实现我想要的功能,我必须向 luaproc 添加功能,以允许从父线程或任何其他未从 luaproc 调度程序运行的线程发送和接收消息。此外,我的更改允许使用 luaproc 从由 luaproc.newproc() 创建的 lua 状态创建的协程发送/接收。

我向 api 添加了一个额外的 luaproc.addproc() 函数,该函数可以从不受 luaproc 调度程序控制的上下文运行的任何 lua 状态调用,以便使用 luaproc 来设置自身以发送/接收消息。

我正在考虑将源代码发布为新的 github 项目,或者联系开发人员,看看他们是否愿意提取我的添加内容。欢迎就我应如何将其提供给其他人提出建议。

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

什么样的 Lua 多线程包在发布时“正常工作”? 的相关文章

  • 使用 Boost:Asio 的游戏服务器如何异步工作?

    我正在尝试创建一个游戏服务器 目前我正在使用线程来制作它 每个对象 玩家 怪物 都有自己的带有 while 1 循环的线程 在其中执行特定的功能 服务器基本上是这样工作的 main some initialization while 1 r
  • 如何在我的 Lua 脚本中添加“睡眠”或“等待”?

    我正在尝试通过更改一天中的时间来为游戏制作一个简单的脚本 但我想快速完成 这就是我要说的 function disco hour minute setTime 1 0 SLEEP setTime 2 0 SLEEP setTime 3 0
  • 如何在.NET 中编写安全/正确的多线程代码?

    今天我必须修复一些使用线程的旧 VB NET 1 0 代码 问题在于从工作线程而不是 UI 线程更新 UI 元素 我花了一些时间才发现可以使用 InvokeRequired 断言来查找问题 除了上面提到的并发修改问题之外 还可能遇到死锁 竞
  • 并行模拟写入同一文件

    我的目标是在集群上并行运行 10 000 个左右的 Julia 编码模拟 每个模拟独立于所有其他模拟 每个模拟都有一个要输出的数字 以及有关哪个模拟产生该数字的 3 列信息 因此 强制每个模拟打印在单独的文件上对我来说听起来有点愚蠢 我可以
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 在 Three.js 中从 Web Worker 加载纹理

    当将大纹理图像应用到网格上一段明显的时间时 Three js 会锁定浏览器的主线程 让我们考虑以下示例 var texLoader new THREE TextureLoader texLoader load someLargeTextur
  • OpenMP:无法并行化嵌套 for 循环

    我想将循环与其中的内循环并行化 我的代码如下所示 pragma omp parallel for private jb ib shared n Nb lb lastBlock jj W WT schedule dynamic private
  • std::condition_variable::wait_for 和 std::condition_variable::wait_until 有什么区别?

    The 我正在使用的参考 http en cppreference com w cpp thread condition variable对两者的解释如下 wait for 阻塞当前线程 直到条件变量被唤醒或在指定的超时持续时间之后 wai
  • 如何限制Erlang VM(BEAM)使用的核心数量?

    我正在具有 2 个四核 Xeon E5520 2 2GHz 24 0GB RAM 和 Erlang R15B02 启用 SMP 的节点上运行实验 我想知道是否可以限制Erlang VM使用的核心数量 以便我可以暂时禁用一些核心并逐步增加数量
  • Android 为什么这不会抛出错误的线程异常?

    我的印象是视图只能从主线程操作 但是 为什么这不会崩溃 public class MainActivity extends Activity TextView tv Override protected void onCreate Bund
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 是否可以在 OpenCL 中并行运行求和计算?

    我是 OpenCL 的新手 不过 我了解 C C 基础知识和 OOP 我的问题如下 是否可以以某种方式并行运行求和计算任务 理论上可能吗 下面我将描述我尝试做的事情 任务例如是 double values new double 1000 l
  • 如何在Spring-Boot中创建DefaultMessageListenerContainer?

    我是 Spring Boot 的新手 并尝试创建 DefaultMessageListenerContainer 以便我可以使用 weblogic workmanager 并以多线程方式运行多个消息侦听器 有人可以提供一些例子吗 到目前为止
  • 多线程Spring-boot控制器方法

    因此 我的应用程序 spring boot 运行速度非常慢 因为它使用 Selenium 来抓取数据 处理数据并显示在主页中 我遇到了多线程 我认为它对我的应用程序很有用 可以让它运行得更快 但是教程似乎显示在带有 main c 的普通 j
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程

随机推荐

  • 服务层是否应该访问 HttpContext?

    我正在构建一个大致遵循存储库模式的应用程序 顶部有一个服务层 类似于 Conery 的 MVC Storefront 的早期版本 我需要实现一个返回除当前用户之外的所有用户的页面 我已经在存储库和服务层上有了 GetUsers 方法 所以问
  • 如何在不相关的类之间传递C++回调?

    在非升压项目中 我有一个类 它使用基于特定用户操作 按下 释放按钮 的计时器 我希望此类具有通用性 因此它需要回调用户定义的操作 TimerClass h typedef void timerCallback void Class Time
  • 您是否可以允许用户回复卡片而不让卡片及其回复文本出现在时间线中?

    当我有一个带有回复操作的捆绑包 也许单个时间线卡也会发生这种情况 并且用户执行该操作 例如 花生酱和果冻三明治 时 会出现一个新的时间线卡 其中黑色背景上有白色文本玻璃上写着 花生酱和果冻三明治 当查看游乐场时 会出现同一张卡片 用户的头像
  • 如何临时切换 AWS CLI 的配置文件?

    更新的答案 7 10 2021 对于 AWS CLI v1 请执行以下操作 export AWS DEFAULT PROFILE user2 对于 AWS CLI v2 以下内容将起作用 export AWS PROFILE user2 完
  • SQLALchemy动态filter_by

    我知道您可以通过提供来构建用于 SQLAlchemy 查询的动态过滤器 kwargs to filter by 例如 filters id 123456 amount 232 db session query Transaction fil
  • 简单使用 RSACryptoServiceProvider KeyPassword 失败

    我想用密码保护我的 RSA 私钥 谁不会 但以下 C 失败 SecureString pw new SecureString pw AppendChar x CspParameters prms new CspParameters prms
  • MySQL 批量插入或更新

    有没有办法批量执行查询 例如INSERT OR UPDATE在 MySQL 服务器上 INSERT IGNORE 不起作用 因为如果该字段已经存在 它将简单地忽略它并且不插入任何内容 REPLACE 不起作用 因为如果该字段已经存在 它将首
  • 将订阅的 Android 应用程序转移到另一个帐户

    据我所知 谷歌不允许将应用程序所有权通过应用程序订阅从一个开发者帐户转移到另一个开发者帐户 我一直在等待他们启用该功能 但到目前为止 该功能尚不可用 也没有预计到达时间 我有一个付费应用程序 其中包含应用程序内订阅 一家公司正在寻求收购我的
  • 泄漏:ByteBuf.release() 在被垃圾收集之前没有被调用。 Spring Reactor TcpServer

    我正在使用reactor core 1 1 0 RELEASE reactor net 1 1 0 RELEASE 正在使用netty all 4 0 18 Final reactor spring context 1 1 0 RELEAS
  • 如何修改 git post-update hook 以仅在一个(主)分支上激活?

    我在我的网络主机上设置了一个裸存储库 并从中克隆了一个存储库 只要将更改推送到裸存储库 该存储库就会更新 Web 主机上的克隆存储库本质上是 生产 它位于 public html 目录中 我非常严格地遵循了该网站上的说明 http www
  • 设置默认的 apache 虚拟主机

    除了选择它找到的第一个配置之外 还有其他更好的方法来设置默认的 apache 虚拟主机吗 我有一台包含许多域的服务器 其中只有一些域配置了 httpd 但默认的虚拟主机被切断 例如 aaa com 我真的希望它默认为 mmm com 吗 像
  • 已知起点和距离计算第二点

    使用纬度和经度值 A 点 我尝试计算另一个点 B 距离 A 点 X 米 距离 A 点 0 弧度 然后显示 B 点的纬度和经度值 示例 伪代码 PointA Lat x xxxx PointA Lng x xxxx Distance 3 Me
  • 如何在 Python 中打印 Unicode 字符代码?

    我想打印 unicode 的字符代码 而不是它在 Python 中表示的实际字形 例如 如果u是 unicode 字符列表 gt gt gt u 0 u u0103 gt gt gt print u 0 我想将字符代码输出为原始字符串 u
  • 设置 Github Commit RSS 源

    我正在尝试将我的 github 提交为 RSS feed 但到目前为止我还没有弄清楚 我知道私人提要可使用以下语法 https github com username atom token token 但这是用户的活动源 我想要我的一个项目
  • 如何使用 DynamoDB 进行基本聚合?

    dynamodb 是如何实现聚合的 Mongodb 和 couchbase 具有地图缩减支持 假设我们正在建立一个技术博客 用户可以在其中发布文章 并说文章可以被标记 user id 1235 name John article id 78
  • 在 R 中加载具有最新日期的文件[重复]

    这个问题在这里已经有答案了 假设我有一个文件想要在 R 中加载 让我们称之为file csv 将其加载到 R 中相当容易 不幸的是 在我的情况下 存在该文件的多个版本 并且每个文件都附加了一个日期 所以我的目录中真正拥有的是文件列表 例如
  • Gem::Ext::BuildError: 错误: 无法在 macOS Monterey 上构建 gem 本机扩展

    当我跑步时bundle install在我的 Rails 5 项目中 我在似乎具有本机扩展的 gem 上遇到了许多错误 以下是其中一个 gem 的输出顶部 Installing nio4r 1 2 1 with native extensi
  • Python 测试:使用带有 mock 和 io.StringIO 的假文件

    我正在尝试测试一些在文件上运行的代码 但我似乎无法理解如何使用真实文件替换mock and io StringIO我的代码大致如下 class CheckConfig object def init self config self con
  • Visual Basic UDPClient 服务器/客户端模型?

    因此 我正在尝试制作一个非常简单的系统 将消息从客户端发送到服务器 后来也从服务器发送到客户端 但首先是婴儿步骤 我不确定如何使用 UDPClient 发送和接收消息 尤其是接收消息 主要是因为我没有任何东西触发ReceiveMessage
  • 什么样的 Lua 多线程包在发布时“正常工作”?

    在 Lua 中编码时 我有一个三重嵌套循环 经过 6000 次迭代 所有 6000 次迭代都是独立的 并且可以轻松并行化 Lua 封装了哪些线程开箱即用编译 and 获得不错的并行加速在四个或更多核心上 到目前为止我所知道的是 luapro