Badbollen, den jävla badbollen...
Eller "spinning beach ball (eller "pizza wheel") of death" som den också kallas!
Håller fullständigt med om att badbollen är löjlig. Framförallt när det gäller Finder och nätverksenheter (att hela Finder låser sig när det är något galet). Är det så svårt att alltid ha någon liten resurs över så att om man ber ett program som börjar badbolla att stoppa att det då lägger av med det direkt, utan att man ska behöva vänta eller tvångsavsluta programmet?
Om jag kan växla till ett annat program medans ett badbollar så borde det väl gå att be det badbollande att sluta upp med det som göra att det badbollar?
Jag blir knäpp i badbollen.
Badbollen har egentligen inte så mycket med "resurser" att göra. Både du och artikelförfattaren har missuppfattat vad den beror på.
Ett Cocoa-program har bara en tråd som får arbeta med grafiska komponenter och rita i fönster. Detta är samma tråd som s.a.a. "gör saker" när man klickar på en knapp osv. Om en programmerare skriver ett program som helt enkelt lägger sig och sover ett tag när man klickar på en knapp så kommer ju det programmet att sluta svara på andra händelser. Medan programmet är låst så kan man inte göra något i det, eftersom all grafisk hantering hanteras av den tråden som nu är låst. Om ett program är låst i fler nå några sekunder så kommer badbollen upp automatiskt för att användaren skall bli informerad om att något har stoppats.
Antag t.ex. att ett program läser från en fil när jag trycker på en knapp. En filläsning går normalt väldigt snabbt så man trycker på knappen, filen läses in och allt är färdigt, programmet svarar på alla händelser igen. Om nu helt plötsligt man skulle valt att samma program skal läsa från en nätverksenhet så kan den läsningen ta väldigt lång tid. Definitivt flera sekunder. Under denna tiden så kommer ju programmet att bara vänta på att informationen kommer över nätverket och under tiden så kommer badbollen att visas.
För att lösa ovanstående problem så måste programmeraren istället för att helt enkelt läsa filen, starta en ny tråd som läser informationen. Detta är rätt komplicerat och jobbigt att göra, vilket innebär att de flesta programmerare accepterar att programmet hänger ett tag om läsningen tar väldigt lång tid. Det händer ju inte så ofta ändå.
Anledningen till att badbollen uppkommer oftare på ett system med lite minne eller långsam processor är att allt går långsammare på ett dylikt system och det blir alltså vanligare att en operation tar längre tid och att badbollen dyker upp oftare.
Att badbollen uppkommer är alltså ett tecken på att programmen kunde skrivits bättre. Det går att skriva ett program som i stort sett aldrig visar en badboll. Utför alltid alla operationer i en separat tråd så att den tråd som hanterar grafiken kan köras. I så fall skulle badbollen bara uppkomma i de sällsynta fall då precis den delen av programmets kod måste swappas in från disk, samt att den aktiviteten tar fler än några sekunder.
Och ja, ni har gissat rätt. Finder är mycket dåligt skriven och gör inte det jag skrivit ovan.