最近我在了解线程和纤程之间的区别。
这个回答说:线程使用抢占式调度,而纤程使用协作式调度。
为了获取有关协作式多任务处理与抢占式多任务处理的更多信息,在SO上没有特定的帖子。希望这个问题能帮助获取关于该主题的所有信息。
最近我在了解线程和纤程之间的区别。
这个回答说:线程使用抢占式调度,而纤程使用协作式调度。
为了获取有关协作式多任务处理与抢占式多任务处理的更多信息,在SO上没有特定的帖子。希望这个问题能帮助获取关于该主题的所有信息。
抢占式:线程无法决定何时运行,被强制共享CPU
合作式:每个线程一旦运行,便决定了要使用CPU的时间长度,并且在必要时主动让出CPU,以便其他线程可以使用它。
抢占式
这意味着线程不能控制何时和/或多久使用CPU并运行。操作系统的调度程序(OS的一个组件)在任何时刻都会决定哪个线程可以运行,哪个必须休眠。您无法保证下一个线程将何时运行以及持续多长时间。这完全由调度程序决定。
合作式
在协作式多任务处理中,调度程序没有发言权来决定线程何时可以运行。每个线程决定保持CPU使用的时间长度。如果它不与任何其他线程共享CPU,则不会运行其他线程,从而导致所谓的饥饿情况。
请注意,停止一个线程并启动另一个线程会产生一定的开销。这意味着您会花费时间和资源,而不是纯粹为了实现共享CPU而执行任务的代码。在某些实时低延迟应用程序(例如高频交易)中,这可能是不可接受的。
不能没有硬等待,因此您的任务必须像状态机一样,在立即返回或5ms间隔等方式下工作。
我自己编写了一个小于1K的操作系统来实现此功能。