静态和动态调度的优缺点

时间:2016-10-16 11:09:56

标签: java multithreading concurrency real-time scheduling

我打开这个问题,因为我无法找到关于此主题的易于理解摘要信息。甚至没有一个好的YouTube视频可以解释这一点。

我目前正在研究实时编程,静态和动态调度是其中的一部分。我似乎无法理解它。

如果有人能够以教育方式解释静态和动态调度的优缺点,那将非常有用。

到目前为止我得到的是:

  1. 静态安排: 是一种手动生成计划的离线方法。它可以在运行时修改,但不建议,因为它可能导致线程错过它的截止日期。它易于实施和分析。因为它很容易分析,所以如果系统能够完成所有截止日期,很容易看出它。

  2. 动态调度: 是一种自动生成计划的在线方法。它可以在运行期间被系统修改,并且它应该导致(在大多数情况下)线程错过最后期限。如果系统更改,则很容易生成新的计划,因为它是自动生成的。系统无法保证所有截止日期都满足。

  3. 任何可以解释这两个比我更好的人?或者可能添加有关这两者的更多信息。也许用图像来说明它,这样就可以更容易地绕过它。

3 个答案:

答案 0 :(得分:6)

简单来说,

静态调度是一种机制,我们已经控制了线程/进程在代码中执行的顺序/方式(编译时)。如果你已经在程序中的线程上使用了任何控件(锁,信号量,连接,睡眠)(为了达到某个目标),那么你打算使用静态(编译时)调度。

动态调度是一种机制,其中线程调度由操作系统基于OS级别中实现的任何scheduling algorithm完成。所以线程的执行顺序将完全依赖于该算法,除非我们对它进行了一些控制(使用静态调度)。

我认为“优势”这个词并不是这里最好的词。简单地说,当您使用代码实现对线程的任何控制以实现某些任务时,您应确保使用最少的控件并且还以最优化的方式使用。 :))

<强>增加:

静态与比较之间的比较动态调度

通常,我们从不拥有完全依赖静态或动态调度之一的计算机程序。

相反,我们会有一些程序几乎受到代码本身的控制(强静态)。 This就是一个很好的例子。

有些程序会强烈动态(弱静态)。 This就是一个很好的例子。在那里你可能会看到除了2个线程的开始之外,程序执行的其余部分将是一个免费的传单。

请不要试图找到一个免责声明标准,这个标准会将程序密封为强静态或强烈动态的程序。 :))

肯定&amp;否定

  • 动态排程计划在执行中比静态排程更快,因为它基本上是一个免费的传单,没有任何有意的等待,加入等(任何类型的同步) /线程之间的保护)。

  • 动态排程 无法识别任何线程依赖关系(安全性,同步等)。如果你按照我提到的上述来源,你可能会有这个想法。

  • 一般来说,多线程程序员的优秀程度取决于您在线程上实现的限制,依赖性和瓶颈有限,以便成功完成任务。 :))

我想我已经涵盖了很多东西。如果有的话,请提出我的问题。 :))

答案 1 :(得分:0)

动态排程 -

o主要优势(PROs):       - 允许在编译时处理未知的依赖情况       - 简化编译器       - 允许编译的代码在不同的管道上高效运行

o缺点(CONs):       - 硬件复杂性显着增加       - 增加功耗       - 可能会产生不精确的异常

答案 2 :(得分:0)

在静态调度期间,线程或进程的顺序已由编译器控制。因此,它发生在编译时。 这里如果存在涉及内存的数据依赖,那么在编译时它不会被解决或识别,因此引入了动态调度的概念。

动态调度还确定执行的顺序,但是硬件在这里执行而不是在编译器上执行。