首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua ::如何编写加载多个CPU的简单程序?

Lua ::如何编写加载多个CPU的简单程序?
EN

Stack Overflow用户
提问于 2011-06-17 13:45:49
回答 6查看 19.5K关注 0票数 14

我还不能用Lua编写一个程序来加载多个CPU。自从Lua 通过协同支持这个概念。以来,我相信这是可以实现的。

我失败的原因之一可以是:

  • 在Lua是不可能的
  • 我不能把它写成(我希望是这样的)

一个更有经验的人(两周前我发现Lua )能为我指明正确的方向吗?

The point is to write a number-crunching script that does hi-load on ALL cores...用于Lua的权力演示。

谢谢..。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-17 16:51:18

在操作系统意义上,Lua协同与线程不是一回事。

OS线程是先发制人的。这意味着它们将在任意时间运行,窃取操作系统规定的时间。如果可用,它们将在不同的处理器上运行。他们可以在可能的情况下同时跑。

卢阿合作公司不会这么做的。协同线可能具有“线程”类型,但只能同时激活单个协同线。协同线将运行,直到协同线本身决定通过发出coroutine.yield命令停止运行。一旦它产生,它将不会再次运行,直到另一个例程向该特定的协同线发出coroutine.resume命令。

Lua提供协作多线程,这就是为什么它们被称为co例程的原因。他们互相合作。一次只运行一件事情,只有当任务明确地要求这样做时,您才会切换任务。

您可能认为您可以只创建OS线程,在Lua中创建一些协同器,然后在不同的OS线程中继续每个线程。只要每个OS线程在不同的Lua实例中执行代码,这就可以工作。Lua是可重入的;您可以从不同的OS线程调用它,但只有在从不同的Lua实例调用时才允许。如果您试图通过同一个Lua实例进行多线程,Lua可能会做一些不愉快的事情。

所有存在的Lua线程模块都为每个线程创建备用Lua实例。卢伊特只是为每个线程创建一个全新的Lua实例;除了复制传递给新线程的参数之外,没有用于线程到线程通信的API。LuaLanes确实提供了一些交叉连接的代码.

票数 19
EN

Stack Overflow用户

发布于 2011-06-17 14:04:14

使用核心Lua库是不可能的(如果不计算创建多个进程和通过输入/输出进行通信),但我认为不同线程库都有Lua绑定。

从jpjacobs回答相关问题之一链接到LuaLanes,这似乎是一个多线程库。(不过,我没有经验。)

如果将Lua嵌入到应用程序中,通常需要将多线程以某种方式链接到应用程序多线程。

票数 6
EN

Stack Overflow用户

发布于 2011-06-17 14:13:43

除了LuaLanes之外,还可以看看十一条线

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6386717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档