Lua:Lua 中具有线程结构的抢占式(非协作式)多任务处理

2024-03-09

我想知道 Lua 是否有内置的抢占式多任务处理工具。我想在我的多核系统上使用并发线程。

我研究了协程(参见 lua-users.org/wiki/CoroutinesTutorial 和 stackoverflow.com/questions/3107165/there-is-a-type-named-thread-in-lua-does-anyone-know-something-of-这个),但似乎不符合要求。我写了以下代码:


function foo(ver)
    local iter = 1;
    while true do
        print("foo ver="..ver.." iter="..iter);
        iter = iter + 1;
        for ii = 1,100000 do end -- busy wait
        coroutine.yield()
     end
end

co1 = coroutine.create(foo)
co2 = coroutine.create(foo)

coroutine.resume(co1, 1)
coroutine.resume(co2, 2)

while true do end -- infinite loop

协程确实是合作的,如中所述Lua book http://www.lua.org/pil/9.html。 ANSI C 不解决线程问题,因此在 Lua 中没有“本机”方法来执行抢占式多线程,就像在 C 中没有“本机”方法一样。相反,您必须依赖于对底层操作的调用系统。这Lua wiki http://lua-users.org/wiki/ThreadsTutorial讨论维护线程状态的两种方法。我还找到了一个关于协程的博客文章 http://medek.wordpress.com/2009/01/22/lua-threads-and-stuff/这对两种方法之一进行了更详细的介绍(尽管他自己没有进入抢占式线程)。

LUA书籍说:“我们认为多线程对Lua来说不是一个好主意。”如果您愿意,可以在第 30 章中阅读更多有关他们的担忧的内容。

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

Lua:Lua 中具有线程结构的抢占式(非协作式)多任务处理 的相关文章

  • 双重检查锁定模式

    In 有伪代码来正确实现作者建议的模式 见下文 Singleton Singleton instance Singleton tmp pInstance insert memory barrier 1 if tmp 0 Lock lock
  • 使用具有最大并发进程数的 multiprocessing.Process

    我有Python code from multiprocessing import Process def f name print hello name if name main for i in range 0 MAX PROCESSE
  • 使用 theano 进行多处理

    我正在尝试将 theano 与 cpu 多处理和神经网络库 Keras 结合使用 I use device gpu标记并加载 keras 模型 然后 为了提取超过一百万张图像的特征 我使用多处理池 该函数看起来像这样 from keras
  • 使用来自不同线程的实时数据更新 QTableView 的最佳策略

    我的应用程序现在启动几个线程 如 5 10 个 来从不同源收集数据 它们与主 GUI 线程分离 因此我在 GUI 中感觉不到任何缓慢 并且我可以在后台线程工作时继续工作 一切都很棒 但现在我希望能够在我的主 GUI 中的 QTableVie
  • WaitForSingleObject 是否充当内存屏障?

    昨天一个关于双重检查锁定的问题引发了一系列的想法 让我对一个简单的情况感到不确定 在下面的代码中 是否可以点击printf 不再同步 在这个简单的示例中 这些值可能位于同一缓存行上 因此我认为这种可能性较小 假设一开始可能性 gt 0 如果
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • Android进程调度

    我试图更好地理解 以便在创建 Android 应用程序 服务时确定潜在的互操作性问题对可靠性的影响 我想弄清楚进程优先级是如何确定的 服务和活动之间优先级的差异以及调度程序是否以不同方式对待它们的优先级 基本上 我试图深入了解某个活动或服务
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • .NET 中的线程中止

    我有一个线程正在分析文件并对数据库进行事务调用 每个事务都有一个审计条目作为其事务的一部分 调用 Thread Abort 来停止文件的处理有什么大问题吗 而不是到处散布丑陋的安全点 文件将在 Abort 调用后关闭 明显的问题是放弃交易的
  • 低级键盘钩子不在 UI 线程上

    我想为键盘挂钩创建一个好的库 我使用 SetWindowsHookEx 方法 我注意到如果我的应用程序的主线程繁忙 则应在任何系统 KeyDown 事件中调用的方法 hookProc 不会执行 我认为钩子应该这样制作 以便另一个线程负责它
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • 使用互斥锁来阻止临界区外部的执行

    我不确定我的术语是否正确 但这里是 我有一个由多个线程使用的函数来写入数据 在注释中使用伪代码来说明我想要的内容 these are initiated in the constructor int data std atomic
  • Node.js 工作线程中的 I/O 性能

    下面是一个工作线程示例 在本地计算机上同步 I O 大约需要 600 毫秒 const fs require fs const isMainThread Worker parentPort workerData require worker
  • Python 和 sqlite3.ProgrammingError:不允许递归使用游标

    我写了一个像这样的Python程序 它应该在多线程模式下运行 def Func host cursor db cursor execute SELECT If index Username Version Community Ip traf
  • std::map 只读操作的线程安全

    我有一个 std map 用于将值 字段 ID 映射到人类可读的字符串 当我的程序在任何其他线程启动之前启动时 该映射会被初始化一次 之后就不会再被修改 现在 我为每个线程提供了这个 相当大的 映射的自己的副本 但这显然是内存使用效率低下
  • 线程安全的get(访问器方法)

    我目前正在使用以下代码对变量进行线程安全访问 int gnVariable void getVariableValue int pnValue acquireLock Acquires the protection mechanism pn
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • 为什么在谈论线程和进程时,“不要同时格式化软盘”的评论很有趣?

    我正在阅读之间的区别线程和进程 https stackoverflow com questions 200469 what is the difference between a process and a thread并在第二个答案中发现
  • Python 中 time.sleep 和多线程的问题

    我对 python 中的 time sleep 函数有疑问 我正在运行一个脚本 需要等待另一个程序生成 txt 文件 虽然 这是一台非常旧的机器 所以当我休眠 python 脚本时 我遇到了其他程序不生成文件的问题 除了使用 time sl
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互

随机推荐

  • 我可以同时使用 setupWithNavController 和 setOnNavigationItemSelectedListener

    我有一个带有 BottomNavigationView 的活动 其中包含 5 个项目和片段来显示页面 我将 NavController 设置如下 NavigationUI setupWithNavController mBottomNavi
  • PHP 获取前一个数组元素并知道当前数组键

    我有一个带有特定键的数组 array 420 gt array 430 gt array 555 gt array 在我的应用程序中 我知道当前的密钥 例如555 我想获取前一个数组元素 在此示例中 它是带有键的数组元素430 我怎样才能在
  • MQTT:如何知道 puback 是针对哪条消息的?

    我正在尝试设置一个 MQTT 服务器 它将客户端发送的消息保存到本地数据库中 每条消息都有一个 成功接收 标志 当接收客户端为收到的每条消息 QOS 1 返回 puback 时 我想翻转该标志 问题是 当我发布消息时 服务器正确接收从接收客
  • Symfony 2 多个应用程序?

    这似乎是与 Symfony2 相关的最可怕的话题 因为经过一周的搜索和测试 我仍然找不到答案 简而言之 我正在构建一个具有多个子域的应用程序 我希望为所有子域提供不同的配置 同时共享来自 src 的多个捆绑包 更重要的是 导入中央配置和路由
  • Spring Data JPA:删除乐观锁定语义

    有一个实体Foo with a Version柱子 如果我想删除它 我希望 Spring Data JPA 和 或 Hibernate 检查 Version列与数据库中的列匹配 如果不符合 则应拒绝删除 对于独立实体来说 这可以按预期工作
  • 为什么在 Javascript 的 array.forEach 回调中提供数组参数?

    Javascript 的数组迭代函数 forEach every some等 允许您传递三个参数 当前项 当前索引和正在操作的数组 我的问题是 与通过闭包访问数组相比 将数组作为参数进行操作有什么好处 我为什么要使用这个 myArray f
  • Github Desktop - 作者身份未知

    我正在使用 github 桌面上传一些基本网站的代码 然后使用 github 页面 但是 每次我尝试提交到 main 时 都会出现错误 提示 作者身份未知 我知道我必须将我的姓名和电子邮件放入文件中 但是其中有两个带有 JavaScript
  • 可变参数函数 - 如何确保参数正确传递

    有没有什么方法 内置或代码模式 来确保向可变参数函数传递正确数量的参数 显然 这将作为 API 的一部分包含在内 我可以检查我自己的内部代码 我正在考虑要求 UN32 Magic Number 作为最后一个传递的参数 并检查可变参数函数的有
  • “tensorboard”不被识别为内部或外部命令,

    刚刚开始使用 Tensorflow 但我无法在 cmd 上使用 tensorboard 命令 它给出了错误命令 C Users tushar PycharmProjects gt tensorboard logdir NewTF tenso
  • AngularJS 和 ReactJS 之间的主要区别是什么

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要创建一个将转换为移动应用程序的网站 我想要构建的内容更适合成为网站而不是应用程序 因此建筑物本身应该作为网站 由于我更熟悉桌面和
  • Camel Apache:从接收到的 XML 中提取一些值的 xpath

    在我的 Camel 路由期间 我查询服务器 HTTP GET 结果 我收到一个 200 OK 其 XML 正文看起来类似如下
  • PHP websocket 连接到 node.js 服务器

    我有简单的 node js websocket 服务器 var fs require fs var ws require var options secure false var Server ws createServer options
  • 从 Graph API 中删除照片标签

    我正在尝试创建一个应用程序来帮助用户删除不需要的标签 我听到很多人抱怨 FB 不再允许公众访问删除图片 标签也是如此吗 I get error type OAuthException message 3 Application does n
  • 无法从存储“C:\Users\....\.android\debug.keystore”读取密钥 AndroidDebugKey:密钥库格式无效

    我正在尝试在 android studio 中发布一个简单的项目 所以我转到菜单 gt 构建 gt 构建 apk 但是我收到此错误 Error Execution failed for task app packageDebug gt Fa
  • 将球体映射到立方体

    这里描述了一种将立方体映射到球体的特殊方法 http mathproofs blogspot com 2005 07 mapping cube to sphere html http mathproofs blogspot com 2005
  • INNER JOIN 与“FROM”中的多个表名[重复]

    这个问题在这里已经有答案了 可能的重复 INNER JOIN 与 WHERE 子句 有什么区别 https stackoverflow com questions 1018822 inner join versus where clause
  • 检查引用完整性是否被破坏

    在我的过程中 我做了类似的事情 SET FOREIGN KEY CHECKS 0 LOAD DATA INFILE path to mytable txt INTO TABLE mytable SET FOREIGN KEY CHECKS
  • ANTLR:乘法省略“*”符号

    我正在尝试创建一个用于乘法和除法的语法 其中不需要包含 符号 我需要它来输出 AST 所以对于这样的输入 1 2 3 4 我希望 AST 是 1 2 3 4 我发现了以下内容 它使用 java 代码来创建适当的节点 grammar Test
  • 如何防止 Eclipse 自动关闭 TERMINATED lauches 控制台日志?

    After应用程序启动 执行终止 所以它不再运行 它的控制台日志保留在那里供审查 直到我们开始另一次执行 当发生新的执行时 即使是来自 ant 自动构建 所有终止的启动控制台日志都会自动关闭 那么 如何避免控制台日志自动关闭终止启动 执行
  • Lua:Lua 中具有线程结构的抢占式(非协作式)多任务处理

    我想知道 Lua 是否有内置的抢占式多任务处理工具 我想在我的多核系统上使用并发线程 我研究了协程 参见 lua users org wiki CoroutinesTutorial 和 stackoverflow com questions