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.