Я знаю, что этот вопрос довольно старый, но с 2009 года ситуация изменилась.
Теперь необходимо учитывать две вещи: количество ядер и количество потоков, которые могут работать в каждом ядре.
В процессорах Intel количество потоков определяется гиперпоточностью, равной всего 2 (если доступно). Но Hyperthreading сокращает ваше время выполнения в два раза, даже если не используется 2 потока! (то есть 1 конвейер, совместно используемый двумя процессами - это хорошо, когда у вас больше процессов, но не так хорошо в противном случае. Чем больше ядер, тем лучше!)
На других процессорах у вас может быть 2, 4 или даже 8 потоков. Так что если у вас есть 8 ядер, каждое из которых поддерживает 8 потоков, у вас может быть 64 параллельно работающих процесса без переключения контекста.
«Без переключения контекста», очевидно, неверно, если вы работаете со стандартной операционной системой, которая будет выполнять переключение контекста для всех видов вещей вне вашего контроля. Но это главная идея. Некоторые операционные системы позволяют вам распределять процессоры так, чтобы только ваше приложение имело доступ / использование указанного процессора!
Исходя из моего собственного опыта, если у вас много операций ввода-вывода, хорошо использовать несколько потоков. Если у вас очень тяжелая работа с памятью (чтение источника 1, чтение источника 2, быстрые вычисления, запись), тогда наличие большего количества потоков не поможет. Опять же, это зависит от того, сколько данных вы читаете / пишете одновременно (то есть, если вы используете SSE 4.2 и читаете 256-битные значения, это останавливает все потоки на их шаге ... другими словами, 1 поток, вероятно, намного проще реализовать и вероятно, почти так же быстро, если не на самом деле быстрее. Это будет зависеть от вашей архитектуры процессов и памяти, некоторые продвинутые серверы управляют отдельными диапазонами памяти для отдельных ядер, поэтому отдельные потоки будут работать быстрее при условии, что ваши данные правильно хранятся ... поэтому на некоторых В архитектурах 4 процесса будут выполняться быстрее, чем 1 процесс с 4 потоками.)