coroutine.yield()函数会将程序控制权返还给NodeMCU eLua固件中的SDK吗?

我正在阅读https://nodemcu.readthedocs.io/en/master/en/lua-developer-faq/#esp8266-specifics,其中提到Lua代码需要返回,以便SDK能够运行其他任务:

所有其他服务和应用程序处理被分成代码执行块,称为任务。各个任务依次执行并完成。没有任务可以抢占另一个任务。

以及

Lua库与SDK协作工作,排队等待挂起事件并调用任何已注册的Lua回调例程,然后这些例程将不受干扰地运行到完成。

然后,PiL指出,yield可以用于暂停可以稍后恢复的函数调用:

协同程序的真正威力源于yield函数,它允许运行的协同程序暂停其执行,以便稍后可以恢复执行。

我的问题是:NodeMCU的eLua实现在执行coroutine.yield(c)时是否将控制权返回给SDK?…因此,是否可以使用NodeMCU/eLua固件实现协作式多线程算法?

在这种情况下,coroutine.resume(c)如何工作?

点赞