有效的软件调度

问题描述 投票:0回答:1

例如,如下所示的代码

while(1){
  task1();
  task2();
}

以rr方式执行的task1()和task2()之间应该有合作。但是,如果task1()的实现如下:

task1(){
  while(1);
}

是否有一种构建调度程序的方法,该调度程序通过仅依靠软件来避免task1()垄断资源(例如,每500 ms切换一次任务?

c scheduler
1个回答
0
投票

是否有一种构建调度程序的方法,该调度程序通过仅依靠软件来避免task1()垄断资源(例如,每500 ms切换一次任务?

是的,有可能;但在普通C语言中可能是不可能的,因为(至少)您需要在任务切换期间在不同的堆栈之间切换。

但是,您应该知道仅每500 ms切换一次任务是非常“无效的”。特别;当一项任务必须等待任何内容(时间延迟,从网络接收的数据,用户输入,要从磁盘获取的数据,互斥锁等)时,您希望通过切换到其他任务(如果有)来保持CPU繁忙还有其他任务)。

为此;您要么需要针对所有内容的完全异步接口(C都没有),要么需要控制所有代码(例如编写OS)。

当然,大多数任务切换是由“任务必须等待某件事”或“某项任务正在等待发生”引起的;并且每500毫秒切换一次任务是相对无关紧要的(仅对不执行任何IO的稀有任务很重要),即使是有意义的,这也是一个坏主意(在“ 10个完成的工作中有5个完成了,5个完成了,未开始的工作”)。

© www.soinside.com 2019 - 2024. All rights reserved.