Lua: многозадачность preemtive (не совместная) в Lua с нитевидными структурами - PullRequest
3 голосов
/ 23 марта 2011

Мне было интересно, есть ли в 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 /)?

Спасибо, Тони

Ответы [ 2 ]

4 голосов
/ 23 марта 2011

Сопрограммы действительно сотрудничают, как указано в книге Луа . ANSI C не рассматривает многопоточность, поэтому в Lua нет «родного» способа упреждающей многопоточности, как в «нет» «родного» способа. Вместо этого вам придется полагаться на вызовы базовой операционной системы. система. В Lua wiki обсуждаются два способа поддержания состояния потока. Я также нашел сообщение в блоге о сопрограммах , в котором более подробно рассказывается об одном из двух методов (хотя сам он не занимается приоритетными потоками).

Также стоит отметить, что в книге Луа говорится: «Мы не думаем, что многопоточность - хорошая идея для Луа». Вы можете прочитать больше об их проблемах в главе 30, если вы так склонны.

2 голосов
/ 24 марта 2011

Возможно, вас заинтересует LuaLanes , который обеспечивает реальную многопоточность для Lua.

...