Citat:
Jo, noteringen att majoriteten av alla program inte behöver extrem prestanda syftar i detta fall främst på vanliga användning på stationär dator, eller en hel del nätansluten embedded-utrustning.Det kanske är tillfälligheter, men i hela mitt yrkesverksamma liv har prestandan undervärderats i initiala projektfaser för att i slutänden vara det kanske ensamt viktigaste kriteriet. Å andra har jag bara jobbat med konkurrensutsatta produkter.
Ett misstaget många gör är att de tror att det är gratis att käka upp alla resurser som ändå finns, att det inte gör något om det drar 100% cpu och 100MB minne att visa ett formulär på skärmen. Men en telefon liknar mer och mer en vanlig dator där användaren växlar snabbt mellan appar som syns på skärmen medan andra appar kör parallellt i bakgrunden. Samtidigt kostar varje cpu-cykel i förlorad batteri-tid. Och som jag varit inne på tidigare förutsätter varje java-process att det är fritt fram att sno alla resurser för egen del. Java är till för att köra ett program åt gången, inte för att köra flera program samtidigt.
Ett misstaget många gör är att de tror att det är gratis att käka upp alla resurser som ändå finns, att det inte gör något om det drar 100% cpu och 100MB minne att visa ett formulär på skärmen. Men en telefon liknar mer och mer en vanlig dator där användaren växlar snabbt mellan appar som syns på skärmen medan andra appar kör parallellt i bakgrunden. Samtidigt kostar varje cpu-cykel i förlorad batteri-tid. Och som jag varit inne på tidigare förutsätter varje java-process att det är fritt fram att sno alla resurser för egen del. Java är till för att köra ett program åt gången, inte för att köra flera program samtidigt.
Vidare - tar man t ex en timer, så är den event-styrd. Sover 99.99% av tiden och tar något beslut i samband med timer-click. Så det är mest statisk strömförbrukning som spelar roll.
Men 10% högre CPU-last eller 10% längre exekveringstid för godtyckligt program slår ju direkt på batteriförbrukningen om plattformen är batteridriven. Och en embedded-produkt som normalt är nätdriven men har inbyggd UPS tappar ju på motsvarande sätt drift-tid på sin batteribackup.
En vanlig Android-telefon kan ofta fixa 1-2 veckor på batteri i flight-mode. Inte för att radion är så extremt hungrig utan bara för att så många grisande program har regel att de kryper ihop och sover om det saknas nät och laddning - får det något av nät eller laddning så börjar de direkt köra massiva mängder bakgrundsjobb. Varje enskilt program är skrivet med antagandet att just det programmet är viktigt.
Jag upplever att det finns ett stort gap mellan utvecklare och management - management vill ha "cool" utan att tänka på att en del av de tuffa sakerna drastiskt påverkar t ex batteritid. Extremfall är en produkt som behövde ha eco-funktion. Eco-funktionen stängde av bakgrundsbelysningen till stor eldriven apparat. Microskopisk energibesparing - men management kunde inte acceptera en bunts sekunders fördröjning för att yttre utrustning skulle bli redo för användning när man lämnar eco-mode. Men databladet måste ju få säga att apparaten hade eco-mode. Alltså dit med knapp och programvarubluff - ungefär som VW-dieslarna.
Så helt klart dyker det ofta upp kravspecifikationer som inte så där lysande matchar vad planerad hårdvara faktiskt är lämplig att klara av. Eller där tidplanen inte så där lysande lämnar nödvändig tid för att implementera den där hyper-effektiva algoritmen som är närmast rocket-science men som faktiskt möjliggör att uppfylla kraven. Så antingen blir produkten försenad eller också klagar produktägaren på att den ju inte alls blev så bra som man beställde, när produkten släpptes i tid och inom kostnadsram men med standard-kod som då inte är skräddarsydd för uppgiften.