А что, если пройтись по синтаксису каждой программы, и поставить везде вызов такой функции?
function nanoyield(...)
coroutine.yield("no-event")
return ...
end
Таким образом, код
while true do
var = io.open("file","r")
s = var:read("*a")
var:close()
end
превратится примерно в
while nanoyield(true) do nanoyield()
var = nanoyield(io.open("file","r"))
s = var:read("*a")
nanoyield(var:close())
end
Таким образом, получится шедевральное распределение ресурсов процессора.
А хост-программа будет обрабатывать "no-event" как пропуск передачи события в код потока. У каждого потока будет стек событий. Если все потоки вернули "no-event", то события и вовсе не будут проверяться, пока не пройдет таймер, и не придется взять событие, дабы избежать ошибок в системе.
Вот это был бы шедевр...