Зачем нужны сопрограммы Lua? Почему этот код не работает так, как я ожидал?

У меня проблемы с пониманием этого кода ... Я ожидал чего-то похожего на многопоточность, когда я получу вывод со случайными "nooo" и "yaaaay", перемежающимися с каждым другое, поскольку они оба выполняют печать асинхронно, но я обнаружил, что основной поток, кажется, блокируется при первом вызове coroutine.resume () и, таким образом, предотвращает запуск следующего, пока первый не сработает.

Если это так. предполагаемые сопрограммы операций, для чего они полезны и как мне достичь цели, на которую я надеялся? Придется ли мне реализовать свой собственный планировщик, чтобы эти сопрограммы работали асинхронно? Потому что это кажется беспорядочным, и я также могу использовать функции!

co1 = coroutine.create(function ()
        local i = 1
        while i < 200 do
                print("nooo")
                i = i + 1
        end
        coroutine.yield()
end)

co2 = coroutine.create(function ()
        local i = 1
        while i < 200 do
                print("yaaaay")
                i = i + 1
        end
        coroutine.yield()
end)

coroutine.resume(co1)
coroutine.resume(co2)
33
задан T. Bergemann 19 June 2012 в 23:10
поделиться