Мне было интересно, есть ли в Lua какие-либо встроенные средства превентивной многозадачности.Я хотел бы иметь параллельные потоки для использования в моей многоядерной системе.
Я изучил сопрограммы (см. Lua-users.org/wiki/CoroutinesTutorial и stackoverflow.com/questions/3107165/there-is-a-type-named-thread-in-lua-делает-кто-то-знает-что-то-это), но, похоже, не отвечает всем требованиям.Я написал следующий код:
</p>
<pre><code>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
Программа печатает:
</p>
<pre><code>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 /)?
Спасибо, Тони