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?
Obsługa wątków przez procesor
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: U krasnoludów - pod górą
- Postów: 4712
Cały system wątków rozwinął się i dobrze działał na komputerach z jednym rdzeniem.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1912
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
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: XML Hills
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10
Sens traci dopiero jak masz tych wątków bardzo dużo, bo context switching(kiedy procesor przydziela czas procesora innemu wątku) kosztuje
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
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.