multitasking - 协同多任务系统

标签 multitasking

我试图绕过协作多任务系统的概念以及它在单线程应用程序中的工作原理。

我的理解是,这是一种“多任务处理的形式,其中多个任务通过在每个任务中的程序员定义的点自愿将控制权让给其他任务来执行”。

因此,如果您有一个任务列表并且一个任务正在执行,您如何确定将执行传递给另一个任务?当您将执行权交还给之前的任务时,如何从之前的位置恢复?

我觉得这有点令人困惑,因为我不明白如果没有多线程应用程序如何实现这一点。

任何建议都会非常有帮助:)

谢谢

最佳答案

协作多任务处理背后的基本思想是信任——每个子任务将自行及时放弃控制,以避免占用其他任务的处理器时间。这就是为什么协作式多任务系统中的任务需要非常彻底的测试,并且在某些情况下需要经过认证才能使用。

我不自称是专家,但我想协作任务可以作为状态机来实现,将控制权传递给任务会导致它运行绝对 最小 取得任何进展所需的时间。例如,文件读取器可能会读取文件的下几个字节,解析器可能会解析文档的下一行,或者传感器 Controller 可能会读取一次,然后将控制权返回给协作调度程序,该调度程序将检查任务完成。

每个任务都必须将其内部状态保留在堆上(在对象级别),而不是像传统的阻塞函数或线程那样在堆栈帧(在函数级别)上。

与依赖硬件计时器来触发上下文切换的传统多任务处理不同,协作式多任务处理依赖于以这样一种方式编写的代码,即每个长时间运行的任务的每一步都保证在可接受的少量时间内完成.

关于multitasking - 协同多任务系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415303/

相关文章:

ios - 按主页时退出应用程序

c - 我什么时候应该在任务中使用线程? - FreeRTOS

multithreading - 多线程设计模式

objective-c - 多任务iPhone SDK uibackgroundmodes无法与音频一起使用吗?

iPhone - 区分 UIApplicationDidBecomeActiveNotification 通知

multithreading - 多任务、多线程和多处理之间的区别?

ios - applicationDidEnterBackground 总是在 applicationWillTerminate 之前调用吗?

objective-c - iOS 7 多任务处理和 completionHandler

ios - Appcelerator:重新打开应用程序时的事件

android - 实现 float 应用程序......从哪里开始