Wiem, że to pytanie jest dość stare, ale sytuacja ewoluowała od 2009 roku.
Należy teraz wziąć pod uwagę dwie rzeczy: liczbę rdzeni i liczbę wątków, które mogą działać w każdym rdzeniu.
W przypadku procesorów Intel liczba wątków jest definiowana przez Hyperthreading, który wynosi zaledwie 2 (jeśli są dostępne). Ale Hyperthreading skraca czas wykonania o dwa, nawet jeśli nie używasz 2 wątków! (tj. 1 potok współdzielony między dwoma procesami - jest to dobre, gdy masz więcej procesów, w przeciwnym razie nie jest tak dobre. Więcej rdzeni jest zdecydowanie lepszych!)
Na innych procesorach możesz mieć 2, 4 lub nawet 8 wątków. Więc jeśli masz 8 rdzeni, z których każdy obsługuje 8 wątków, możesz mieć 64 procesy działające równolegle bez przełączania kontekstu.
„Brak przełączania kontekstu” nie jest oczywiście prawdą, jeśli używasz standardowego systemu operacyjnego, który będzie przełączał kontekst dla wszelkiego rodzaju innych rzeczy poza twoją kontrolą. Ale to jest główny pomysł. Niektóre systemy operacyjne umożliwiają przydzielanie procesorów, więc tylko Twoja aplikacja ma dostęp / użycie tego procesora!
Z własnego doświadczenia wynika, że jeśli masz dużo wejść / wyjść, wiele wątków jest dobrym rozwiązaniem. Jeśli masz bardzo ciężką pracę wymagającą dużej ilości pamięci (odczyt źródła 1, odczyt źródła 2, szybkie obliczenia, zapis), posiadanie większej liczby wątków nie pomaga. Znowu zależy to od tego, ile danych jednocześnie odczytujesz / zapisujesz (tj. Jeśli używasz SSE 4.2 i odczytujesz wartości 256 bitów, co zatrzymuje wszystkie wątki w ich kroku ... innymi słowy, 1 wątek jest prawdopodobnie o wiele łatwiejszy do wdrożenia i prawdopodobnie prawie tak szybko, jeśli nie szybciej. Zależy to od architektury procesu i pamięci, niektóre zaawansowane serwery zarządzają osobnymi zakresami pamięci dla oddzielnych rdzeni, więc oddzielne wątki będą szybsze, zakładając, że dane są poprawnie zapisane ... i dlatego, na niektórych architektur, 4 procesy będą działać szybciej niż 1 proces z 4 wątkami).