静态和动态调度的优缺点

问题描述 投票:4回答:3

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

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

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

到目前为止我得到的是以下内容:

  1. 静态调度:是一种手动生成调度的离线方法。它可以在运行时修改,但不建议,因为它可能导致线程错过它的截止日期。它易于实施和分析。因为它易于分析,所以很容易看出系统是否会完成所有截止日期。
  2. 动态调度:是一种自动生成调度的在线方法。它可以在运行期间被系统修改,并且不应该导致(在大多数情况下)线程错过最后期限。如果系统更改,则很容易生成新的计划,因为它是自动生成的。无法保证系统满足所有截止日期。

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

java multithreading concurrency real-time scheduling
3个回答
6
投票

简单来说,

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

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

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

加成:

静态和动态调度的比较

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

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

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

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

积极与否定

  • 动态调度调度的执行速度比静态调度快,因为它基本上是一个免费的传单,没有任何有意的等待,连接等(线程之间的任何类型的同步/保护)。
  • 动态调度不了解任何线程依赖性(安全性,同步等)。如果你按照我提到的上述来源,你可能会有这个想法。
  • 因此,一般来说,多线程程序员的优秀程度取决于您在线程上实现的限制,依赖性和瓶颈有限,以便成功完成任务。 :))

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


0
投票

动态调度 -

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

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


0
投票

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

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

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