我看了Lua的书,了解到Lua中的多线程是协作的。我找不到的是有关线程优先级的一些信息。我猜想具有相同优先级的线程会运行直到完成,因为多线程是协作的,或者完成了收益。如果一个线程的优先级高于另一个线程呢?
它是否能够中断优先级较低的线程,或者当优先级较低的线程运行完成时,它会运行下一个线程吗?
Lua 中没有本机线程(抢占式多任务处理),但是正如您所说,存在协作多任务处理。
抢占式多任务处理和协作式多任务处理之间的区别在于,在抢占式多任务处理中,“线程”不一定允许运行直到完成,但可以被其他线程抢占。这是由调度程序完成的,调度程序定期运行,将一个线程切换为另一个线程。这就是优先级发挥作用的地方。如果具有较高优先级的线程想要运行,它可以抢占已经运行的具有较低优先级的线程,并且调度程序将在下次调度程序运行时选择该线程(取决于调度策略)。
在协作多任务处理中,不一定要有调度程序(尽管出于实际原因,拥有一个调度程序通常是个好主意)。然而,存在协同进程。协进程类似于线程,但它不能被抢占。它可以运行直至完成,也可以让位于另一个协进程并允许其运行。
所以回到你的问题,如果你想要协作多任务处理的优先级,你需要编写一个调度程序,它决定运行哪个协进程,给定其优先级,并且你需要编写你的协进程,所以它们放弃一次处理一会儿,然后将控制权交还给调度程序。
Edit
需要澄清的是,非抢占式多任务处理和协作式多任务处理之间存在细微差别。非抢占式多任务处理范围更广一些,因为它允许静态调度和协作多任务处理。
静态调度意味着调度程序可以调度周期性任务,然后这些任务可以在任务让出时运行,可能具有更高的优先级。
协作多任务处理也是一种非抢占式多任务处理。然而,这里的任务仅由任务本身调度,并且控制权显式地从一个任务转移到另一个任务,但是它转移给哪个任务可以基于优先级。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)