我还不能用Lua编写一个程序来加载多个CPU。自从Lua 通过协同支持这个概念。以来,我相信这是可以实现的。
我失败的原因之一可以是:
一个更有经验的人(两周前我发现Lua )能为我指明正确的方向吗?
The point is to write a number-crunching script that does hi-load on ALL cores...用于Lua的权力演示。
谢谢..。
发布于 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确实提供了一些交叉连接的代码.
发布于 2011-06-17 14:04:14
使用核心Lua库是不可能的(如果不计算创建多个进程和通过输入/输出进行通信),但我认为不同线程库都有Lua绑定。
从jpjacobs回答相关问题之一链接到LuaLanes,这似乎是一个多线程库。(不过,我没有经验。)
如果将Lua嵌入到应用程序中,通常需要将多线程以某种方式链接到应用程序多线程。
发布于 2011-06-17 14:13:43
除了LuaLanes之外,还可以看看十一条线
https://stackoverflow.com/questions/6386717
复制相似问题