multithreading - Lua 中的线程优先级

标签 multithreading lua thread-priority

我看了 Lua 的书,了解到 Lua 中的多线程是协作的。我找不到有关线程优先级的一些信息。我猜想具有相同优先级的线程会一直运行到完成,因为多线程是协作的,或者完成了一个yield。如果一个线程的优先级高于另一个线程呢?

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

最佳答案

Lua 中没有 native 线程(抢占式多任务),但是如您所说,有协作式多任务。

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

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

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

编辑

澄清一下,非抢占式多任务处理和协作式多任务处理之间存在细微差别。非抢占式多任务处理更广泛一些,因为它允许静态调度和协作多任务处理。

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

协作式多任务处理也是一种非抢占式多任务处理。但是,这里的任务只是由任务自己调度,并且控制权显式地从一个任务让给另一个任务,但它让给哪个任务,可以基于优先级。

关于multithreading - Lua 中的线程优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943785/

相关文章:

c# - 如何最好地解析任何常量 Lua 表而不将其加载到 Lua VM 中?

android - 如何禁用 Corona 中的隐藏按钮?

c - 通过知道线程名称来设置线程的优先级

linux - 为什么在这种情况下会发生优先级反转 - Linux?

Java线程概念

Python:如何显示对话框窗口并同时工作

lua - "Attempt to index local..."为什么会出现此错误?

c# - C# 和 vs2008 中的线程调试

c# - 如何杀死主线程?

Android:AsyncTask 的优先级高于 Service