我想知道 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(使用前将#替换为@)