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