Obsługa wątków przez procesor

0

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?

1

Cały system wątków rozwinął się i dobrze działał na komputerach z jednym rdzeniem.

1

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

4

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.

0

Sens traci dopiero jak masz tych wątków bardzo dużo, bo context switching(kiedy procesor przydziela czas procesora innemu wątku) kosztuje

2

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1