Многопоточность и многопроцессорность всегда лучше, когда они смущающе параллельны, поэтому каждый поток или процесс не связаны с работой других потоков, и хуже всего, когда потоки пытаются совместно использовать один и тот же ресурс.
- интенсивный ввод / вывод, поэтому очень часто используются системные вызовы (чтение / запись из файлов / каналов / сокетов, запись в стандартный вывод и т. Д. c.)
Хорошая идея иметь такие процессы - это когда каждый процесс выполняет ввод / вывод (читает и / или пишет) с разных носителей. Плохая идея, когда они пытаются использовать один и тот же носитель и ждут друг друга.
На старых носителях, когда устройство должно перемещать головки чтения / записи между несколькими дорожками, это может серьезно снизить производительность.
Нагрузка на процессор, следовательно, очень часто используются системные вызовы
Вот ограничение на количество процессорных ядер в системе. В лучшем случае для каждого процессорного ядра требуется один процесс с интенсивным использованием процессора. Таким образом, если эти процессы используют одно и то же ядро, то это наихудшее, а когда каждый из них работает на разных ядрах, тогда это лучше. заставляя многопроцессорную обработку на одном ядре выполнять хуже, чем те же вычисления, выполняемые одним процессом (я полагаю, в руках мастера в обоих случаях).
Часто многопроцессорная обработка выполняется не только из соображений производительности. Более частая причина заключается в том, что архитектура, состоящая из более мелких модулей, является более чистой, а качество таких модулей проще для тестирования и обеспечения разделения.