Lua如何编写简单的程序以加载多个CPU?
我无法编写一个 Lua 程序,它可以加载多个 CPU。由于 Lua 支持协程的概念,我相信这是可以实现的。
导致我失败的原因可能是:
- Lua 不支持
- 我无法编写(并且我希望这是原因)
有更多经验的人(我两周前才发现 Lua)可以指点一下我吗?
关键是编写一个数字计算脚本,在所有核心上进行高负载...
为了展示 Lua 的强大。
谢谢...
原文链接 https://stackoverflow.com/questions/6386717
Lua 协同程序和操作系统中的线程不是同一概念。
操作系统中的线程是抢占式的。也就是说,它们会在任意时间运行,根据操作系统的时间片来分配运行时间。如果有多个处理器,则它们可以在不同的处理器上运行。它们还可以在可能的情况下同时运行。
Lua 协同程序不会这样做。虽然协同程序的类型可能是 “线程”,但同一时间只能有一个协同程序处于活动状态。协同程序将运行,直到协同程序本身决定通过发出 coroutine.yield
命令停止运行。一旦它被挂起,它就不会再运行,直到另一个例程对该特定协同程序发出 coroutine.resume
命令。
Lua 协同程序提供了 协作式的 多线程,这也是它们被称为 co 协同程序的原因。它们彼此合作。一次只运行一件事情,只有在任务明确要求切换任务时才会进行任务切换。
你可能认为你可以创建操作系统线程,在 Lua 中创建一些协同程序,然后在不同的操作系统线程中恢复每个协同程序。只要每个操作系统线程在不同的 Lua 实例 中执行代码,这将起作用。Lua API 可重入;你可以从不同的操作系统线程调用它,但 只有 从不同的 Lua 实例调用才可以。如果你尝试通过同一个 Lua 实例进行多线程处理,Lua 可能会做出不愉快的事情。
所有存在的 Lua 线程模块都为每个线程创建了替代的 Lua 实例。Lua-lltreads 为每个线程创建了全新的 Lua 实例;在新线程中没有线程间通信的 API。LuaLanes 确实提供了一些交叉连接代码。
很简单,只需创建多个 Lua 解释器并在所有解释器中运行 lua 程序。
Lua 多线程采用共享无模式。如果需要交换数据,则必须将数据序列化为字符串,并使用 c 扩展、socket 或任何类型的 IPC 将其从一个解释器传递到另一个解释器。
通过类似IPC的传输机制对数据进行序列化并不是在线程之间共享数据的唯一方式。
如果您在像C ++这样的面向对象的语言中进行编程,那么多个线程可以通过对象指针访问共享对象,但是这样做是不安全的,除非您提供某种保证,保证没有两个线程将尝试同时读取和写入相同的数据。
有许多选项可供您执行此操作,无锁和无等待机制越来越受欢迎。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
在核心 Lua 库(如果不考虑通过输入/输出创建多个进程的情况)中不可能实现,但我认为有 Lua 绑定不同线程库的存在。
来自 jpjacobs 对相关问题的回答 链接到 LuaLanes,这似乎是一个多线程库。(我没有经验)
如果您将 Lua 嵌入到应用程序中,则通常希望将多线程与应用程序的多线程相链接。