静态和动态调度的优点和缺点
Advantages and disadvantages with Static- and Dynamic Scheduling
我打开这个问题是因为我找不到容易理解关于这个主题的总结信息。甚至没有一个很好的 youtube 视频可以解释这一点。
我目前正在研究实时编程,静态和动态调度是其中的一部分。我似乎无法理解它。
如果有人能以教育的方式解释静态和动态调度的优缺点,那将非常有帮助。
到目前为止我得到的是以下内容:
静态调度:
是一种手动生成计划的离线方法。它可以在 运行 时间内修改,但不建议这样做,因为它会导致线程错过它的最后期限。它易于实施和分析。因为分析起来很容易,所以很容易看出系统是否会在所有截止日期前完成。
动态调度:
是一种自动生成计划的在线方法。它可以在 运行 时间内被系统修改,并且它不应该导致(在大多数情况下)线程错过它的最后期限。如果系统发生变化,很容易生成新的计划,因为它是自动生成的。无法保证系统满足所有截止日期。
谁能比我更清楚地解释这两个?或者添加更多关于这两者的信息。也许用图片来说明它,这样我就更容易理解它了。
简单来说,
静态调度是一种机制,我们已经控制了threads/processes在我们的代码中执行的order/way(编译时)。如果您在程序中对线程使用了任何控制(锁、信号量、连接、睡眠)(以实现某些目标),那么您打算使用静态(编译时)调度。
Dynamic Scheduling 是操作系统根据 OS 级别实现的任何 scheduling algorithm 完成线程调度的机制。所以线程的执行顺序将完全取决于该算法,除非我们对其进行一些控制(使用静态调度)。
我认为 'advantages' 这个词在这里不是最好的词。只是当您使用代码实现对线程的任何控制以完成某些任务时,您应该确保使用最少的控制并且以最优化的方式使用。 :))
加法:
静态和动态调度的比较
一般来说,我们永远不会有一个计算机程序完全依赖于仅静态或动态调度之一。
相反,我们会有一些程序,这些程序几乎是由代码本身控制的(强静态)。 就是一个很好的例子。
而且有些程序会是强动态的(弱静态的)。 就是一个很好的例子。在那里你可能会看到除了 2 个线程的开始,其余的程序执行将是免费的。
请不要试图找到将程序密封为强静态或强动态程序的免责声明标准。 :))
正面和负面
动态调度调度比静态调度更快执行,因为它基本上是一个没有任何故意的免费传单等待、加入等(线程之间的任何一种 synchronization/protection)。
动态调度不知道任何线程依赖性(安全性、同步性等)。如果您遵循我提到的上述来源,您可能会有想法。
所以一般来说,您的多线程程序员的水平取决于您在线程上实施的有限限制、依赖性和瓶颈,以成功完成您的任务。 :))
我想我已经涵盖了很多东西。有问题请给我提意见。 :))
动态调度 –
o 主要优点 (PRO):
- 允许处理编译时未知的依赖情况
- 简化编译器
- 允许编译代码 运行 在不同的管道
上有效
o 缺点(缺点):
- 硬件复杂性显着增加
- 功耗增加
- 可能产生不精确的异常
在静态调度期间,线程或进程的顺序已由编译器控制。所以它发生在编译时。
这里如果存在涉及内存的数据依赖,那么在编译时将无法解决或识别,因此引入了动态调度的概念。
动态调度也决定了执行的顺序,但这里是由硬件而不是编译器来决定的。
我打开这个问题是因为我找不到容易理解关于这个主题的总结信息。甚至没有一个很好的 youtube 视频可以解释这一点。
我目前正在研究实时编程,静态和动态调度是其中的一部分。我似乎无法理解它。
如果有人能以教育的方式解释静态和动态调度的优缺点,那将非常有帮助。
到目前为止我得到的是以下内容:
静态调度: 是一种手动生成计划的离线方法。它可以在 运行 时间内修改,但不建议这样做,因为它会导致线程错过它的最后期限。它易于实施和分析。因为分析起来很容易,所以很容易看出系统是否会在所有截止日期前完成。
动态调度: 是一种自动生成计划的在线方法。它可以在 运行 时间内被系统修改,并且它不应该导致(在大多数情况下)线程错过它的最后期限。如果系统发生变化,很容易生成新的计划,因为它是自动生成的。无法保证系统满足所有截止日期。
谁能比我更清楚地解释这两个?或者添加更多关于这两者的信息。也许用图片来说明它,这样我就更容易理解它了。
简单来说,
静态调度是一种机制,我们已经控制了threads/processes在我们的代码中执行的order/way(编译时)。如果您在程序中对线程使用了任何控制(锁、信号量、连接、睡眠)(以实现某些目标),那么您打算使用静态(编译时)调度。
Dynamic Scheduling 是操作系统根据 OS 级别实现的任何 scheduling algorithm 完成线程调度的机制。所以线程的执行顺序将完全取决于该算法,除非我们对其进行一些控制(使用静态调度)。
我认为 'advantages' 这个词在这里不是最好的词。只是当您使用代码实现对线程的任何控制以完成某些任务时,您应该确保使用最少的控制并且以最优化的方式使用。 :))
加法:
静态和动态调度的比较
一般来说,我们永远不会有一个计算机程序完全依赖于仅静态或动态调度之一。
相反,我们会有一些程序,这些程序几乎是由代码本身控制的(强静态)。
而且有些程序会是强动态的(弱静态的)。
请不要试图找到将程序密封为强静态或强动态程序的免责声明标准。 :))
正面和负面
动态调度调度比静态调度更快执行,因为它基本上是一个没有任何故意的免费传单等待、加入等(线程之间的任何一种 synchronization/protection)。
动态调度不知道任何线程依赖性(安全性、同步性等)。如果您遵循我提到的上述来源,您可能会有想法。
所以一般来说,您的多线程程序员的水平取决于您在线程上实施的有限限制、依赖性和瓶颈,以成功完成您的任务。 :))
我想我已经涵盖了很多东西。有问题请给我提意见。 :))
动态调度 –
o 主要优点 (PRO): - 允许处理编译时未知的依赖情况 - 简化编译器 - 允许编译代码 运行 在不同的管道
上有效o 缺点(缺点): - 硬件复杂性显着增加 - 功耗增加 - 可能产生不精确的异常
在静态调度期间,线程或进程的顺序已由编译器控制。所以它发生在编译时。 这里如果存在涉及内存的数据依赖,那么在编译时将无法解决或识别,因此引入了动态调度的概念。
动态调度也决定了执行的顺序,但这里是由硬件而不是编译器来决定的。