Игнорирование накладных расходов от других процессов (вы пометили Windows 7). Ядро будет ставить в очередь каждый поток в том порядке, в котором они готовы. Там намного больше, но это основной смысл.
Каждая программа будет делать много вещей, например, выполнять чтение или запись на диск или в память, каждая из которых является ее собственной задачей. Если каждый процесс когда-либо будет использовать только 20% процессора; P1
выполнит одну задачу, затем P2
выполнит одну. Если P2
становится готовым первым во втором раунде, P2
запускает один, а затем P1
. Это будет продолжаться до тех пор, пока каждый не завершит работу и не завершится.
Теперь использование процесса на 100% означает, что каждое измеренное время (в данном примере 1 секунда), поэтому каждую секунду процессор ВСЕГДА занят, и он всегда вычисляет. В вашем примере 40% использования каждую секунду процессор работает, делая расчеты, в течение 400 миллисекунд. Таким образом, через 10 секунд процессор находился в режиме ожидания всего 6 секунд. (Игнорируя другие программы и накладные расходы)
Эффективно да. Если вы выполняете только один запуск за раз, накладные расходы на переключение вперед и назад не будут применяться, но если процессор только на 40%, это не проблема.
Если бы каждой программе требовалось 100% процессора, вы заметили бы некоторое время задержки для переключения вперед и назад. Помните, одно ядро действительно может делать только одну вещь за один раз, кажется, что оно делает больше, потому что оно очень быстро переключается вперед и назад. Каждый при 50% плюс около 0,01% накладных расходов означает 100,01%, поэтому вы будете "ждать" 10 миллисекунд.
Да, во вступлении у каждой программы было несколько задач, причем с несколькими потоками каждая задача, которую должна была выполнить программа (чтение, а затем запись), быстрее попадала в очередь, поэтому время ожидания было бы меньше, и вы бы быть в состоянии упаковать 40% загрузки ЦП в первые 400 миллисекунд, вместо того, чтобы включать время ожидания, заставляющее работу распределяться примерно на 600 миллисекунд. Это фактически то же самое с большим количеством программ, есть больше накладных расходов для каждой, но это все еще незначительно. (Если вы не попадаете в системы реального времени.)
Опять же, это супер общее, но более или менее то, как несколько программ используют один процессор. Проблемы возникают, когда логика / программа / планировщик не справляются с упорядочением очереди задач, это приводит к большим издержкам, чем больше накладных расходов, тем больше время ожидания, поэтому даже если вашей программе требуется только 40% каждая, накладные расходы на переключение вызовут 30% больше времени на переключение задач или ожидание.