Пусть многозадачная ОС работает на одном процессоре.
Одновременно на исполнение подошло десять одинаковых задач.
Для выполнения одной задачи в монопольном режиме требуется 1 с.
А теперь варианты выполнения задач. Параллельный.
Процессор по очереди переключается с задачи на задачу через 0.01 с.
Время переключения пренебрежительно мало.
Процессор, проработав 10 с, выполнит все задачи.
В среднем, время ожидания завершения произвольной задачи составит ~10 с.
Последовательный.
Сначала исполняется одна задача, затем следующая и т.д.
Процессор, проработав 10 с, также выполнит все задачи.
Время ожидания завершения задач составит: 1 с для первой, 2 с для второй, ... 10 с — для последней.
В среднем выходит 5.5 с.
Вопросы:
1) Получается, что последовательное исполнение лучше (в смысле быстродействия), так?
2) Чем занимается процессор в "последовательном" режиме почти половину времени, если завершает свою работу через 10 с., а в среднем на задачу тратится вдвое меньше?
(Эту задачу придумал сам. Третий вопрос — можно ли ею гордиться? )
Здравствуйте, mrhru, Вы писали:
M>1) Получается, что последовательное исполнение лучше (в смысле быстродействия), так?
Если результаты получаются в самом конце и они все самоценны, то да.
Если каждая задача сыплет ответами 10 раз в секунду или все ответы надо в итоге сложить, то по фигу.
M>2) Чем занимается процессор в "последовательном" режиме почти половину времени, если завершает свою работу через 10 с., а в среднем на задачу тратится вдвое меньше?
Ты нас не путай Каждой задачей процессор занимается ровно 1 с.
А ожидание — дело юзера. Чем занимается он — другой вопрос.
Вот ещё на эту тему.
10 машинисток печатают 10 докладов 10 дней.
Сколько дней потребуется 1 машинистке на один доклад?
Здравствуйте, mrhru, Вы писали:
M>Вопросы: M>1) Получается, что последовательное исполнение лучше (в смысле быстродействия), так?
Немного изменим сценарий последовательного выполнения.
процессор по очереди выполняет все задачи, но за 0.01 с. до завершения приостанавливает выполнение задачи. А в последние 0.1 с. завершает все задачи.
Время ожидания выполнения задачи получается те же ~10 с.
...
P>Вот ещё на эту тему. P>10 машинисток печатают 10 докладов 10 дней. P>Сколько дней потребуется 1 машинистке на один доклад?
Ты нас не путай ((с) Pushkin).
Естественно, 1 день. А двум машинисткам — 2 дня, и т.д. Потому что, чем больше одновременно "работающих" машинисток, тем больше им надо времени на перемывание косточек друг другу и всем своим родственникам, знакомым, примериванию всяких кохточек, мухточек и пр.
Здравствуйте, Pushkin, Вы писали:
P>Вот ещё на эту тему. P>10 машинисток печатают 10 докладов 10 дней. P>Сколько дней потребуется 1 машинистке на один доклад?
Сколько же его произносить будут, если машинистке целых 10 дней печатать надо!
P>10 машинисток печатают 10 докладов 10 дней. P>Сколько дней потребуется 1 машинистке на один доклад?
1. считаем каждая машинистка печает один доклад
а) она его печатает 10 дней => ответ 10
б) печатает 1 день, потом может , а может ... кто ее знает => 1 день
в) одна 10 дней, а остальные
....
Здравствуйте, mrhru, Вы писали:
M>Естественно, 1 день. А двум машинисткам — 2 дня, и т.д. Потому что, чем больше одновременно "работающих" машинисток, тем больше им надо времени на перемывание косточек друг другу и всем своим родственникам, знакомым, примериванию всяких кохточек, мухточек и пр.
Профессиональная машинистка вполне может печатать и при этом совершенно спокойно перемывать косточки.
А вот примеривание кофточек занимает необходимый для печатания ресурс — "руки".
Если без примеривания кофточек, то, думаю, что все же 10 дней.
С другой стороны, не сказано сколько машинок у них в распоряжении. Если одна, то получается 1 день.
Здравствуйте, mrhru, Вы писали:
M>Одновременно на исполнение подошло десять одинаковых задач. M>Для выполнения одной задачи в монопольном режиме требуется 1 с.
M>А теперь варианты выполнения задач. M>Параллельный. M>Процессор по очереди переключается с задачи на задачу через 0.01 с. M>Время переключения пренебрежительно мало. M>Процессор, проработав 10 с, выполнит все задачи. M>В среднем, время ожидания завершения произвольной задачи составит ~10 с.
M>Последовательный. M>Сначала исполняется одна задача, затем следующая и т.д. M>Процессор, проработав 10 с, также выполнит все задачи. M>Время ожидания завершения задач составит: 1 с для первой, 2 с для второй, ... 10 с — для последней. M>В среднем выходит 5.5 с.
M>Вопросы: M>1) Получается, что последовательное исполнение лучше (в смысле быстродействия), так?
В смысле какого быстродействия? Среднего? В смысле среднего времени ожидания получения результата от каждой задачи — лучше. В смысле времени ожидания результата всех задач — не лучше, в контексте данного условия. Это уже смотря что важнее в каждом конкертном случае. Если тебе нвжно иметь решение всех задач для перехода к какому-то следующему этапу обработки данных, то разницы между этими двумя вариантами, разумеется, не будет.
С точки зрения реальной жизни, условие у тебя заметно "идеализировано". Твое условие предполагает запуск задач, которые на протяжении всего времени выполнения загружают процессор на 100%. В такой ситуации запускать более одной задачи в однопроцессорной системе нет никакого смысла. А в реальной жизни в процессе решения отдельной задачи процессор может часто простаивать. Например, при выполнении синхронной операции ввода-вывода. В такой ситуации имеет смысл запускать несколько задач на одном процессоре, и время параллельного выполнения задач будет меньше времени последовательного выполнения. Чем больше процент времни простоя процессора в рамках одной задачи, тем больше задач можно запустить одновременно и тем больше будет выигрыш параллельного выполнения над поледовательным.
M>2) Чем занимается процессор в "последовательном" режиме почти половину времени, если завершает свою работу через 10 с., а в среднем на задачу тратится вдвое меньше?
Не понял. Нет никакого смысла сравнивать среднее время ожидания с суммарным временем ожидания. Это сравнение ни о чем не говорит.