Математическое планирование процессов - PullRequest
0 голосов
/ 12 января 2012

У меня есть программа, которая печатает «А» 3 раза, с задержкой в ​​1 секунду между каждым отпечатком.Однократный вызов этой программы займет 2,00 секунды.

Представьте, что я создал планировщик заданий, который выполнял процесс в течение 0,5 секунд, а затем переключался на следующий процесс (временно приостанавливая предыдущий, пока не достиг его снова).Если бы я запустил программу, упомянутую выше, дважды и запустил этот планировщик заданий на этих двух процессах, разве это не заняло бы всего 4 секунды?

Я проверял это, но на данный момент он рассчитан на 2,5 секунды.Кто-нибудь может объяснить это?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Возможно, эти два задания работают параллельно.Вот что происходит:

  1. Время 0 - Задача 1 запущена
  2. Время 0,5 - Задача 2 запущена [оба выполняются]
  3. Время 2.0 - Задача1 Закончено [Задание 1 выполняется уже 1,5 секунды]
  4. Время 2.5 - Задание 2 выполняется еще 0,5 секунды до завершения.
0 голосов
/ 12 января 2012

Это полностью зависит от механизма, используемого для задержки в одну секунду.

Если в нем используются фактические часы, которые продолжают работать, даже когда работа приостановлена, то нет оснований считать, что для двух таких заданий время должно занимать в два раза больше времени, чем одно. На самом деле, выполнение двух заданий, описанных вами, должно занять чуть более двух секунд. Причина, по которой вы видите 2,5 с, возможно, связана с тем, что гранулярность вашего планировщика равна 0,5 с.

С другой стороны, если задержка выполняется вращением в течение заранее определенного числа циклов ЦП, тогда время выполнения действительно будет суммироваться. Однако никакая вменяемая delay подпрограмма, предназначенная для ЦП общего назначения, не будет реализована таким образом.

...