Ogólna zasada dla wątków polega na tym, że chcesz mieć co najmniej jeden „aktywny” (zdolny do wykonania poleceń natychmiast podany czas procesora) wątek roboczy dla każdej „jednostki wykonawczej” dostępnej na komputerze. „Jednostka wykonawcza” to jeden logiczny procesor instrukcji, więc czterordzeniowy, czterordzeniowy serwer Xeon z hiperwątkiem miałby 32 EU (4 chipy, 4 rdzenie na chip, każdy z hiperwątkiem). Twój średni Core i7 miałby 8.
Jeden wątek na UE to najpełniejsze wykorzystanie mocy procesora, pod warunkiem że wątki będą zawsze w stanie roboczym; prawie nigdy tak nie jest, ponieważ wątki potrzebują dostępu do pamięci niebuforowanej, dysku twardego, portów sieciowych itp., na które muszą czekać i które nie wymagają aktywnej uwagi procesora. W ten sposób możesz jeszcze bardziej zwiększyć ogólną wydajność dzięki większej ilości wątków ustawionych w kolejce i gotowych do użycia. To kosztuje. gdy procesor przełącza wątek, musi buforować rejestry wątku, wskaźnik wykonania i inne informacje o stanie, zwykle przechowywane w najgłębszych działaniach UE i bardzo szybko dostępne, umożliwiając innym UE w tym układzie procesora na pobranie go. Wymaga również wątków w systemie operacyjnym, aby zdecydować, na który wątek należy przełączyć. Wreszcie, kiedy UE zmienia wątki, traci przyrost wydajności potoku, z którego korzysta większość architektur procesorów; musi przepłukać rurociąg przed przełączeniem wątków. Ponieważ jednak wszystko to zajmuje średnio o wiele mniej czasu niż zwykłe czekanie, aż dysk twardy, a nawet pamięć RAM wróci z informacjami, jest to warte kosztów.
Jednak ogólnie rzecz biorąc, gdy przekroczysz dwukrotnie liczbę „aktywnych” wątków w porównaniu z UE, system operacyjny zaczyna spędzać więcej czasu na wątkach planowania w UE, a UE spędza więcej czasu na przełączaniu się między nimi, niż faktycznie spędza na uruchamianiu aktywnych wątków programów. To jest punkt braku ekonomii skali; uruchomienie wielowątkowego algorytmu potrwa dłużej, jeśli w tym momencie dodasz dodatkowy wątek.
Ogólnie rzecz biorąc, chcesz zachować co najmniej tyle wątków w swoim programie, ile masz UE na komputerze, ale chcesz uniknąć ponad dwukrotnej liczby tych, które nie czekają ani nie śpią.