Bästa svaret
F: Varför blandar programmerare alltid ihop Halloween och jul?
A: Eftersom den 31 oktober == 25 dec!
Två byte möts. Den första byten frågar ”Är du sjuk?”. Den andra byten svarar, ”Nej, bara känner mig lite avstängd.”
F: hur många programmerare krävs för att byta en glödlampa?
A: ingen, det ”sa maskinvaruproblem
F: Hur många Microsoft-programmerare krävs för att byta en glödlampa?
S: ingen, de gör bara mörkret till en standard och säger till alla ”detta beteende är designat ”
En datavetenskaplig student studerar under ett träd och en annan drar upp sig på en spännande ny cykel. Den första studenten frågar,” Var fick du det? ”. Studenten på cykeln svarar,” Medan jag studerade ute drog en vacker flicka upp på sin cykel, hon tog av sig alla sina kläder och sa: ”Du kan få vad du vill”. ” Den första studenten svarar: ”Bra val! Hennes kläder skulle förmodligen inte passa dig.”
En fysiker, en ingenjör och en programmerare satt i en bil som körde över en brant alpinpass när bromsarna misslyckades. Bilen blev snabbare och snabbare, de kämpade för att komma runt hörnen och en eller två gånger räddade bara den svaga krockspärren dem från att krascha nerför bergssidan. De var säkra på att de alla skulle dö när de plötsligt såg en flyktfil. De drog sig in i flyktfilen och stannade säkert. Fysikern sa ”Vi måste modellera friktionen i bromsbeläggen och den resulterande temperaturhöjningen, se om vi kan ta reda på varför de misslyckades”. ingenjör sa ”Jag tror att jag har några skiftnycklar i ryggen. Jag kommer att ta en titt och se om jag kan ta reda på vad som är fel”. Programmeraren sa ”Varför kommer vi inte igång igen och se om det är reproducerbart?”
F: ”Vad är det objektorienterade sättet att bli rik?”
A : Arv
En programmerare till sina vänner (även programmerare): ”Jag träffade en het tjej igår kväll. Jag tog med henne hem och vi började kyssa rasande. Jag satt henne på tangentbordet och …”. Alla vänner i samförstånd sa ”Har du en dator hemma? Vad är RAM för det? ”
En SQL-fråga går in i en stapel, går upp till två tabeller och frågar” Kan jag gå med i dig? ”
När din hammare är C ++, allt börjar se ut som en tumme.
F: Hur många prologprogrammerare krävs för att byta en glödlampa?
A: Ja.
A programmeraren lägger två glas på sängbordet innan han lägger sig. En full, om han blir törstig, och en tom, om han inte gör det.
En kille står på gatan och röker en cigarett efter den andra. En dam som går förbi honom och säger ”Hej, vet du inte att dessa saker kan döda dig? Jag menar, såg du inte den gigantiska varningen på lådan ?!” ”Det är OK” säger killen och puffar avslappnat ”jag” en datorprogrammerare ”.” Så? Vad har det med något att göra? frågade damen. Han svarade ”Vi bryr oss inte om varningar. Vi bryr oss bara om fel. ”
Det finns tio typer av människor i världen. De som förstår binära och de som har regelbundet sex.
Så den här programmeraren går ut på ett datum med en het brud
Svar
De är väldigt dåliga.
De är de typ av folk som kommer att gå in och modifiera ett finjusterat system med en ”uppenbar” fix, och skruva upp allt hemskt, med de absolut bästa avsikterna.
För att ge dig en idé, en annan utmärkt ingenjör jag känner , Jeffrey Hsu, arbetade på ClickArray (nu känd som Array Networks) och fick mig anställd där för att han behövde en annan typ av ”stor pistol” för att få göra riktigt prestandakritiskt arbete.
Och vi fick det gjort.
På 1,3 GHz Pentium 4-system (det var 2001).
Vi fick en omvänd proxy-cache upp till något över 38 700 TCP-anslutningar per sekund – vilket inte är imponerande tills du inser att det bara finns 16 384 användbara portar för INADDR\_ANY, såvida du inte ändrar det väsentligt TCP / IP-stacken, om det är ett BSD- eller Linux-baserat system.
Vi hade inte modifierat stacken – det var en BSD-stack – så det innebar att vi också svarade på initiala sidläsningsförfrågningar i det samma tidsram.
Och sedan fortsatte vi med nästa problem
Ungefär en halv månad in i nästa problem, uppenbarligen någon hade äntligen tagit sig tid att göra prestandatester på de förändringar de hade gjort i resten av koden i cachen.
Vi fick se en ökande panik runt kontoret för en några dagar och frågade flera gånger vad problemet var och fick höra att vi inte skulle oroa oss för det och fortsätta arbeta med det vi arbetade med.
Vi gjorde det för vi fixade den finita statsmaskinen att vara en verklig slutlig maskin och omstrukturera cachekoden vid den tiden. Det är faktiskt en av sakerna som fick företaget sin nästa finansieringsrunda.
Slutligen ringde deras hotshots oss in för att se om vi kunde lösa deras problem.
De fick cirka 6300 anslutningar per sekund.
De hade förlorat ungefär en faktor 6X i prestanda, och de kunde inte räkna ut var.
Det tog oss ett par timmar, och vi spårade äntligen upp det till en ”gör optimering för flera CPU-maskiner”.
Vi ångrade det, och vi var tillbaka till cirka 35 000 anslutningar per sekund, justerade en några varma kodvägar, och i slutet av dagen var vi tillbaka till de gamla siffrorna.
För att förstå ”optimeringen” som ” hot shot programmerare ”trodde att han gjorde, du måste förstå att trådning inte egentligen var mycket av en sak vid den tiden.
Även om det hade varit, arbetade vi fortfarande genom statsmaskinen. , vilket måste göras innan den globala staten möjligen kunde ha flyttats till ett enda ”statligt” objekt för att göra det per tråd och förhindra att instanser stör varandra.
Så skalningsmodellen var att har flera ”arbete att göra” -motorer som s rocesses, och sedan en ”gatekeeper” -process som skulle låta en process gå till jobbet på en begäran när den kom in. Den såg alla förfrågningar och sedan ”låt processen gå”; om det fanns fler förfrågningar skulle kqueue i portvakt ”låta en annan process gå” och så vidare.
Vår ”hot shot” hade lagt märke till att en process gjorde nästan alla förfrågningar som serverades, medan andra processer var (mestadels) inaktiva.
Detta beror på att jag medvetet hade använt en LIFO istället för en FIFO för de processer som väntade på ”arbete att göra”.
Så han ”fixade ”Det genom att ändra det till en FIFO.
Och föreställningen gick till helvetet.
Anledningen till att jag hade använt en LIFO i För det första, även om jag visste att det inte nödvändigtvis skulle dela belastningen mellan kärnorna, var det för att jag visste några saker som ”hot shot” inte visste.
Jag visste att:
- Som nätverksapparat skulle vi nästan alltid vara I / O, snarare än CPU, bundna om vi inte laddade i en modul för att göra något som att ta bort utrymme eller skriva om innehåll för reklamändamål
- Mer till sak, jag visste att den sista processen för att komma i linje var att gå g att ha alla sina sidor i kärnan, medan den som satt i viloläge förmodligen inte skulle ha alla sina sidor i kärnan
- Dessutom är jag ny att det skulle bli TLB-cachekollisioner, eftersom alla användares rymdprocesser mappades i samma adressintervall, vilket resulterade i spolningar
- Vilket innebar att det skulle behöva laddas om cache, vilket minimalt innebar att gå ut till åtminstone L1, och förmodligen L2-cache
- Kombinerat skulle detta resultera i ytterligare instruktioner för pipeline-instruktioner, eftersom det inte fanns någon L3-cache på P4-arkitekturen
- Och så bytte jag medvetet det jag visste antagligen skulle vara inaktiva CPU-cykler på det kärnor för vad jag visste skulle ha den bästa I / O-bundna prestandan
Så jag hade medvetet valt en LIFO-order och verifierat en prestationsförbättring med en teknik som jag först använde 1994 eller så kallade (av mig, eftersom jag hade uppfunnit tekniken) ”hot engine scheduling”.
Så detta ”hot shot” hade förstört pe prestanda på grund av förändringen.
Och sedan efter den påstådda ”optimeringen”, misslyckades med att köra ett prestandatest för att verifiera att det faktiskt var en optimering.
Det enda han d kontrollerades att processerna under belastning markerade ungefär samma CPU-användning totalt över tiden, vilket är vad han menade att han skulle få bättre flerkärnanvändning.
De absolut värsta mjukvaruutvecklarna är de som är tillräckligt bra för att vara farliga, men inte tillräckligt bra för att känna igen när de fattar ett dåligt beslut.
De görs ännu värre genom att inte verifiera efter det faktum att beslutet faktiskt var dåligt genom att mäta resultaten av deras förändringar med hjälp av någon opartisk linjal.