Не то, что я знаю, нет. Было бы почти абсурдно просто, если бы вы могли уступать через ловушки, установленные в сопрограммах с помощью debug.sethook, но это не работает. Вы можете получить доход от C-хуков, установленных из C (lua_sethook), но я не могу понять точно , чтобы сделать это, и это не чистый Lua в любом случае.
Даже если бы это было возможно, это не было бы истинным потоком. Например, все будет работать в том же потоке операционной системы. Ваш хук будет учитывать множество факторов (таких как время, возможно, память и т. Д.), А затем определять, следует ли уступать. Затем поддавшийся сопрограмм решал, какой дочерний сопрограмм будет работать следующим. Вам также необходимо решить, когда следует вызывать хук. Чаще всего встречается на каждой инструкции Lua, но это влечет за собой снижение производительности. И если сопрограмма вызывает функцию C, у Lua нет юрисдикции. Если этот вызов C занимает много времени, вы ничего не можете с этим поделать.
Здесь - связанная ветка из списка рассылки Lua-L, которая может вас заинтересовать.