Oll*_*liP 3 lua multithreading thread-priority
我看了一下Lua的书,并了解到Lua中的多线程是合作的.我找不到的是有关线程优先级的一些信息.我猜想具有相同优先级的线程会一直运行直到完成,因为多线程是合作的,或者是完成了收益.那个优先级高于另一个优先级的线程怎么样?
是否能够中断优先级较低的优先级,或者当优先级较低的线程运行到完成时它是否会运行?
Lua中没有本机线程(抢占式多任务处理),但是正如您所说的那样,存在协作式多任务处理.
抢占式和协作式多任务处理之间的区别在于,在抢先式多任务处理中,"线程"不一定允许在完成之前运行,但可以被其他线程抢占.这是由调度程序完成的,调度程序以固定间隔运行,将一个线程切换为另一个线程.这是优先级的来源.如果具有较高优先级的线程想要运行,它可以抢占具有较低优先级的已经运行的线程,并且调度程序将在下次调度程序运行时选择该线程(取决于调度策略).
在协作式多任务处理中,不必有调度程序(尽管出于实际原因,通常最好有一个调度程序).然而,有一些共同进程.协同进程就像一个线程,除了它不能被抢占.它可以运行完成,也可以屈服于另一个协同进程并允许它运行.
回到你的问题,如果你想要合作多任务的优先级,你需要编写一个调度程序,它决定运行哪个协同进程,给定它的优先级,你需要编写你的协同进程,所以他们放弃处理一次在一段时间内,并将控制权转回调度程序.
编辑
为了澄清,非抢占式多任务处理和协作式多任务处理之间存在细微差别.非抢占式多任务处理有点广泛,因为它允许静态调度和协作式多任务处理.
静态调度意味着调度程序可以调度周期性任务,然后可以在任务产生时运行,可能具有更高的优先级.
协作式多任务处理也是一种非抢占式多任务处理.但是,此处任务仅由任务本身调度,并且控制从任务明确地产生到另一个任务,但是它产生的任务可以基于优先级.