最近,我正在了解线与纤维的不同之处。 This答案表明
线程使用抢占式调度,而光纤使用协作式 安排。
为了获得有关协作式多任务与抢先式多任务的更多信息,SO上没有特定的文章。希望这个问题对获取有关该主题的所有信息有所帮助。
答案 0 :(得分:1)
抢占式:线程不决定何时运行,而被迫共享CPU
合作:每个线程一旦运行,就决定将CPU保持多长时间以及何时将其放弃,以便另一个线程可以使用它。
抢先
表示线程在何时和/或要使用CPU多长时间内不受控制。调度程序(操作系统的组件)在任何时候决定哪个线程可以运行,哪个线程必须休眠。您无法保证线程下一次将运行什么时间以及运行多长时间。 这完全取决于调度程序。
合作社
在协作式多任务处理中,发生的事情是调度程序无法确定线程何时可以运行。每个线程决定将CPU保留多长时间。如果决定不与任何其他线程共享CPU,则不会运行其他线程,从而导致饥饿。
请注意,停止一个线程并启动另一个线程会产生一定的开销。这意味着您花费时间和资源不是为了执行任务代码,而仅仅是为了允许CPU共享。 在某些实时情况下,这可能是完全不能接受的。
答案 1 :(得分:1)
协作式多任务处理对于嵌入式系统非常有用。 像通常在main.c中创建事件处理程序一样,仅让IRQ将标志传递给它,而不是在ISR中实际运行此代码。 因此,如果您将事件处理程序扩展为还允许RTC计数器让每个任务进入睡眠状态,并告诉它们在1毫秒或60秒内返回,那么这对于电池寿命非常有用,因为即使是5毫秒,您也要尽可能多地睡眠。
您不必辛苦,所以您的任务必须像状态机一样, 告诉它立即返回或每隔5毫秒返回一次。
我用不到1K的代码编写了自己的操作系统。