Vinnaren i pepparkakshustävlingen!
2016-10-30, 01:06
  #1
Medlem
Jag är inte så jätte kunnig inom detta område, men jag kan basics om vad som händer och varför. Men en sak jag inte fattar är varför man inte kan använda CPU på 100%. Eller är det att den arbetar på 100% men det att det bara står tex 50% (om man kollar i "Aktivitetshanteraren").
Citera
2016-10-30, 01:09
  #2
Medlem
Osäker på vad du menar. Det går absolut att använda 100%, men det är ju onödigt att göra det när det inte behövs.
Citera
2016-10-30, 01:23
  #3
Medlem
bithaxs avatar
Om du har en applikation som endast har en tråd, men du har 2 fysiska kärnor, då kan denna applikation endast använda 50% CPU. Den kan ju inte köra på båda kärnorna samtidigt om den bara har en tråd.

Har du däremot applikationer med flera trådar eller flera applikationer med en tråd kan dessa köras parallellt.

Fö. så visar ofta aktivitethanteraren fler kärnor än det verkligen finns. Intel har nämligen något som kallas för Hyperthreading, där man skapar två virtuella kärnor för varje fysisk. De virtuella kärnorna kan köra en del saker parallellt när inte huvudkärnan använder alla sina resurser, men dessa är mycket mer begränsade. Operativsystemet är oftast inställt på att schemalägga processer på fysiska kärnor i första hand, och på virtuella i andra hand.
Citera
2016-10-30, 01:25
  #4
Moderator
Arne.Ankas avatar
Kör du bil med 100% gaspådrag hela tiden? det finns helt enkelt inget behov.
Citera
2016-10-30, 02:03
  #5
Medlem
annanmedlems avatar
Som andra har sagt GÅR det att hålla den sysselsatt till 100%, huruvida däremot alla resurser i processorn verkligen används 100% då är väl en annan femma eftersom varje processorkärna har olika komponenter som gör olika uppgifter och om några av dessa uppgifter inte behövs / används för tillfället så kommer de ju inte utnyttjas.

Du kan ju kanske jämföra med säg ett kök med en diskbänk med skärbräda och en ugn, Håller du bara på och diskar och förbereder kan du ju inte ösa på med ännu mer disk och grejer att förbereda och få mer gjort för du jobbar ju redan fullt ut även om ugnen inte används ännu.

Fast anledningen till att du inte ser 100% belastning är antagligen en av tre saker:

1) Det finns inte tillräckligt med uppgifter för att kräva 100% belastning, processorn hinner med att göra det som krävs av den på kortare tid. Exempelvis om du spelar en MP3-fil så kräver det ju en viss mängds arbete men det är inte så mycket relativt vad en processor klarar av idag så det kommer inte kräva 100% processor. Om du däremot omkodade en okomprimerad videofilm till en komprimerad version och försökte göra det så snabbt som möjligt hade du kanske använt 100% processor, men för att spela upp MP3-filen i realtid behövdes det inte. I fallet med spel kanske inte spellogiken och anropen till grafikapierna och nätverkskoden o.s.v. kräver 100% av processorn heller utan att spelet hade gått att köra även på en klenare processor.

2) Det andra scenariot är att processorn kan vänta på något, exempelvis vid videoomkodningen ovan så om den okomprimerade videon låg på en väldigt långsam lagringsenhet så kanske det inte gick att hämta material så snabbt som processorn han med att komprimera det och den fick därför stå och vänta. Sådant kan uppstå mot allt möjligt, olika avbrott ifrån hårdvaran / timers, hårddisk, RAM-minne, nätverkskod. Säg att det var en webserver exempelvis den behöver ju kanske inte göra någonting alls förens någon faktiskt besöker websidan och ber om något, just då kommer den ju skynda sig att slutföra uppgiften men när det är klart så är det ju lugnt sen igen, och just när den skall göra något kanske den säg måste hämta något i en databas som kräver att data hämtas ifrån RAM-minnet och så får den vänta lite där, eller om det skulle vara en fil på en hårddisk som har gått ner i viloläge och inte snurrar längre både på att den skall snurra igång och hamna i rätt position för att hämta den aktuella datan.

3) Det tredje scenario är att de har flera kärnor och klarar av att köra flera trådar samtidigt nu som sagt men om det då är en uppgift som bara körs i en enda programtråd så hjälper det ju inte att andra kärnor finns tillgängliga för de kommer ju ändå inte att användas. "Varför gör man inte alla program flertrådade då?" kanske du undrar och det är ju för att det inte är helt enkelt alla gånger, alla uppgifter är inte så enkla att dela upp. Går vi tillbaka till köket så hade ju exemplet kunnat vara flera kök men bara en gris, då kanske du inte kan sätta igång i alla köken samtidigt sålänge grisen är i ett stycke. Punkt två i det fallet kunde ju varit att du säg bad om att få en ny gris och således fick vänta på att den skulle dyka upp och därför inte hade något att göra förens den var framme. Det är dessutom så att det inte är helt lätt att hantera RAM-minne och flera trådar samtidigt som jobbar på samma sak, delar man informationen säg hur mycket pengar där i kassan eller vilka delar som finns kvar på grisen o.s.v. och alla går in och skriver, ändrar, hämtar information o.s.v. samtidigt så kanske någon får fel information eller att delar av informationen är från innan en ändring genomfördes och en annan del är efter att en ändring blev genomförd eller så. Där har man lösningar för att låsa minnesområden så att ingen annan kan gå in och ändra på dem medan man själv (tråden i det här fallet) jobbar med dem och så får andra vänta på sin tur och göra det först senare men även då uppstår ju en låsning enligt 2 ovan eftersom programmet/tråden inte fick sätta igång och göra det den ville.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback