gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:27:47 25 4
gpt4 key购买 nike

我想知道 Lua 是否内置了抢占式多任务处理功能。我希望在我的多核系统上使用并发线程。

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




function foo(版本)
本地迭代器 = 1;
虽然是真的
print("foo ver="..ver.."iter="..iter);
迭代器 = 迭代器 + 1;
for ii = 1,100000 do end -- 忙等待
coroutine.yield()
结尾
结尾

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

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

while true do end——无限循环


程序打印:




foo ver=1 iter=1
foo ver=2 iter=1


然后卡住了。我怀疑它只是在无限循环中等待。用 gdb 附加到它显示只有一个线程在运行。

我怀疑协程是协作式多任务处理,对吗?

如果是这样,是否有一种原生的 Lua 方式在 Lua 中拥有线程?

如果没有,我是否必须使用其他库(如 www.inf.puc-rio.br/~roberto/docs/ry08-05.pdf [PDF] 或 kotisivu.dnainternet.net/askok/bin/lanes/)?

谢谢,托尼

最佳答案

协同程序确实是合作的,如 Lua book 中所述. ANSI C 不解决线程问题,因此在 Lua 中没有“ native ”方法来执行抢占式多线程,就像在 C 中没有“ native ”方法一样。相反,您将不得不依赖对底层操作的调用系统。 Lua wiki讨论了维护线程状态的两种方法。我还找到了一个 blog post about coroutines详细介绍了这两种方法中的一种(尽管他自己并没有涉及抢占式线程)。

可能还值得注意的是,Lua 书中说:“我们不认为多线程对 Lua 来说是个好主意。”如果您愿意,可以在第 30 章中详细了解他们的担忧。

关于multithreading - Lua:Lua 中具有线程结构的抢占式(非合作式)多任务处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com