Så här fungerar multitasking i Iphone OS4
I och med lanseringen av OS4 så lovar Apple multitasking för tredjepartsutvecklare. Här går vi igenom vad det egentligen är Apple lovar leverera.
Multitasking är definitionen på att flera program körs parallellt och delar på datorns resurser. Eftersom Iphone OS är byggt på Darwin och Unix så har systemet per definition redan idag stöd för multitasking. Det har Apple utnyttjat för systemnära tjänster som ljuduppspelning och möjligheten att ringa samtidigt som man kör andra program.
Ett steg på vägen mot att låta tredjepartsutvecklare låta sina program interagera med användarna oavsett om programmet är aktivt eller inte är push. Det som egentligen sker då är att programmet registrerar sin pushtjänst hos operativsystemet som sedan låter Apples servrar hålla en enda konstant uppkoppling med telefonen, och samtidigt en konstant uppkoppling till varje enskild utvecklares server för varje användare av telefonen.
På det viset låter man de centrala servrarna jobba hårt medan telefonerna inte jobbar nästan alls. Alla pushmeddelanden skickas via samma uppkoppling oavsett vilket program de ska levereras till.
Alternativet skulle vara att telefonen själv höll kontakten med alla servrar och därmed drösvis med uppkopplingar parallellt. Detta skulle dra mer ström och bandbredd och både dränera batteriet och kräva mer processorkraft av telefonen.
Det är endast illusionen av multitasking
I OS4 hävdar Apple att man infört multitasking för tredjepart, men egentligen har man bara byggt ut systemet som hanterar push-meddelanden till att omfatta ytterligare några tjänster.
Funktionen är kort och gott så att programmet registrerar en eller flera tjänster centralt hos systemet och sedan sköter en enda central process alla programs tjänster och levererar resultatet till programmet när det aktiveras nästa gång.
Ett annat ord för detta är task switching vilket är en gammal beprövad teknik på lågpresterande hårdvara.
I runda slängar fungerar det så att systemet låter programmet veta när det avslutas och startas och låter programmet utföra en återstartsprocedur när man växlar tillbaka till det. På det viset kan man få illusionen av att programmet körs i bakgrunden, trots att det de facto inte gör det.
Programväxlaren som finns under docken och som man får fram genom ett dubbeltryck på hemknappen är inget annat än en platshållare för de senaste körda programmen. Inget av programmen som syns där körs egentligen, utan de har pausats och – om de har stöd – väntar på att få återgå till den punkten där de senast avslutades.
Att köras utan att köras
Om man skapar en VOIP-session som den som Skype visade i keynoten så är det förmodligen så att programmet pratar med Core Audio (eller något annat centralt API) och att den centrala motorn får instruktioner om hur en anslutning ska upprätthållas och hur ljud in och ut ska hanteras. Kanske att man måste skapa en separat process som håller en liten del av programmet igång. I Skypes fall själva komprimerings- och krypteringsmotorn för ljud.
Antagligen är det just VOIP som är det svåraste att hantera utan att dra allt för mycket kraft. Förmodligen är den ungefär lika energikrävande som vanlig telefoni via GSM.
Övriga tjänster som positionering och ljuduppspelning håller antagligen en väldigt låg energiförbrukning, medan möjligheten att återuppta en process där den avslutades antagligen bara tar upp lite minne av systemet.
Apple har gjort en smart lösning som kommer att tillfredsställa de allra flesta behov man kan ha som användare. Nu är det bara upp till programvaruutvecklarna att bygga in stöd för de nya funktionerna.