Я знаю, що це питання досить старе, але все розвивалося з 2009 року.
Зараз слід враховувати дві речі: кількість ядер та кількість потоків, які можуть працювати в кожному ядрі.
У процесорах Intel кількість потоків визначається Hyperthreading, який складає всього 2 (якщо вони доступні). Але Hyperthreading скорочує час виконання на два, навіть якщо не використовується 2 нитки! (тобто 1 конвеєр, що ділиться між двома процесами - це добре, коли у вас більше процесів, не так добре інакше. Більше ядер, безумовно, краще!)
На інших процесорах у вас може бути 2, 4 або навіть 8 потоків. Отже, якщо у вас є 8 ядер, кожне з яких підтримує 8 потоків, у вас може бути 64 процеси, що працюють паралельно без переключення контексту.
"Немає контекстної комутації", очевидно, не відповідає дійсності, якщо ви працюєте зі стандартною операційною системою, яка буде робити контекстну комутацію для всіляких інших речей поза вашим контролем. Але це головна ідея. Деякі ОС дозволяють виділити процесори, щоб лише ваша програма мала доступ / використання згаданого процесора!
З мого власного досвіду, якщо у вас багато вводу / виводу, корисні кілька потоків. Якщо у вас дуже велика робота з пам'яттю (читання джерела 1, читання джерела 2, швидке обчислення, запис), то більше тем не допоможе. Знову ж таки, це залежить від того, скільки даних ви читаєте / записуєте одночасно (тобто якщо ви використовуєте SSE 4.2 і читаєте значення 256 біт, що зупиняє всі потоки на їхньому кроці ... іншими словами, 1 потік, ймовірно, набагато простіше втілити в життя і Мабуть, майже настільки ж швидким, якщо насправді не швидшим. Це залежатиме від вашої архітектури процесів та пам'яті, деякі просунуті сервери управляють окремими діапазонами пам’яті для окремих ядер, тому окремі потоки стануть швидшими, припускаючи, що ваші дані належним чином подані ... ось чому, на деяких архітектури, 4 процеси будуть працювати швидше, ніж 1 процес з 4 потоками.)