首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua中的线程优先级

Lua中的线程优先级
EN

Stack Overflow用户
提问于 2013-04-11 16:14:40
回答 2查看 715关注 0票数 3

我看过Lua的书,了解到Lua中的多线程是协作的。我找不到的是一些关于线程优先级的信息,我猜具有相同优先级的线程会一直运行到完成,因为多线程是协作的,否则就会完成一次让步。如果一个线程比另一个线程具有更高的优先级呢?

它是否能够中断优先级较低的线程,或者当优先级较低的线程运行到完成时,它会继续运行?

EN

回答 2

Stack Overflow用户

发布于 2013-04-11 16:28:48

Lua中没有原生线程(抢占式多任务),但是正如你所说的那样,有协作式的多任务。

抢占式和协作式多任务之间的区别在于,在抢占式多任务中,“线程”不一定要运行到完成,而是可以被其他线程抢占。这是由调度程序完成的,它以固定的间隔运行,将一个线程切换到另一个线程。这就是优先级的用武之地。如果具有较高优先级的线程想要运行,它可以抢占具有较低优先级的已经运行的线程,并且调度器将在下次运行调度器时选择该线程(取决于调度策略)。

在协作多任务中,不一定要有调度器(尽管出于实际原因,有一个调度器通常是个好主意)。然而,有一些共同的过程。一个协同进程就像一个线程,只是它不能被抢占。它既可以运行到完成,也可以让位给另一个协同进程并允许其运行。

回到你的问题,如果你想要协作多任务的优先级,你需要编写一个调度器,它决定运行哪个协同进程,给定它的优先级,你需要编写你的协同进程,所以他们偶尔会放弃处理,并将控制权交回调度器。

编辑

需要澄清的是,非抢占式多任务和协作式多任务之间存在细微的区别。非抢占式多任务就有点宽泛了,因为它允许静态调度和协作式多任务。

静态调度意味着调度器可以调度周期性任务,然后可以在任务产生时运行,可能具有更高的优先级。

协作式多任务也是非抢占式多任务的一种。然而,在这里,任务只由任务本身调度,控制明确地从一个任务让给另一个任务,但它让给哪个任务,可以基于优先级。

票数 6
EN

Stack Overflow用户

发布于 2013-04-11 16:37:35

在Lua中,线程不能在一个Lua状态下并行运行(即在多个内核上)。没有并发,因为它是协作式多任务。只有当一个线程暂停执行(让步)时,另一个线程才能继续执行。在任何时候,两个Lua线程都不能在一个Lua状态下并发执行。

你正在谈论的是抢占--一个调度器中断一个线程让另一个线程执行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15943785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档