Dzień dobry,
zastanawia mnie w jaki sposób procesor obsługuje program, który np. ma 10 wątków, a procesor np. ma 8 wątków. Czy w sytuacji takiej cały proces wielowątkowości nie traci sensu?
Cały system wątków rozwinął się i dobrze działał na komputerach z jednym rdzeniem.
Współbieżność vs równoległość. Pomyśl, że możesz na systemie operacyjnym mieć odpalanych jednocześnie wiele programów (procesów) dysponując tylko jednym rdzeniem.
Wracając do pytania - program spawnuje 10 wątków, a rdzeni jest 8. Nie wiadomo, na którym rdzeniu będzie wykonany który wątek i nie jest tak, że 2 będą czekać, aż pierwsze 8 się skończy wykonywać (wywłaszczanie).
Warto jeszcze w temacie poczytać to: https://en.m.wikipedia.org/wiki/Amdahl%27s_law
Dzięki time slicing na jednym rdzeniu może działać wiele wątków programowych: https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice
Przez to, że system operacyjny bardzo szybko przełącza między nimi ma się wrażenie, że wszystkie posuwają się do przodu jednocześnie.
Sens traci dopiero jak masz tych wątków bardzo dużo, bo context switching(kiedy procesor przydziela czas procesora innemu wątku) kosztuje
Jeśli każdy twój wątek robi coś mocno CPU-intensive (np. liczy hashe), to nie ma to sensu. Ale jeśli twoje wątki mają dużo przestojów, bo np. czekaja na jakieś I/O albo co gorsza w ogóle to są wątki które np. komunikują się ze zdalnymi maszynami, to wtedy zaczyna to mieć sens, bo taki czekający wątek nie potrzebuje CPU.