Links

  • 1. Sogeti
  • 2. JBoss
  • 3. IBM
  • 4. Oracle
  • 5. SpringSource
  • 6. NL-JUG
  • 7. Java

Archives

Syndication  RSS 2.0

RSS 1.0
RSS 2.0

Bookmark this site

Add 'JCN Blog' site to delicious  Add 'JCN Blog' site to technorati  Add 'JCN Blog' site to digg  Add 'JCN Blog' site to dzone

Posted by Jaap Coomans at 23:48 on Thursday 11 October    Add 'The secrets of concurrency' site to delicious  Add 'The secrets of concurrency' site to technorati  Add 'The secrets of concurrency' site to digg  Add 'The secrets of concurrency' site to dzone

De sessie werd gehouden door Heinz Kabutz, een van de Java Champion’s, dus dat belooft wat. Tot mijn grote opluchting heeft de sessie een zeer overzichtelijke opzet. Kabutz gaat namelijk zijn tien wetten van concurrency met ons doornemen. Om te voorkomen dat we “lost in translation” raken laat ik de aansprekende titels van deze wetten in het Engels.

  1. The law of the Ritalin child
    Deze beeldspraak staat voor het onderdrukken van interrupts van Threads. Kabutz adviseert om alle InterruptedExceptions netjes af te handelen. Dit kan door ofwel deze weer door te gooien, of door in het catchblok zelf de interrupt method op de huidige Thread aan te roepen en vanuit daar netjes af te sluiten. Dit laatste omdat na een InterruptedException de interrupted boolean van de Thread weer op false wordt gezet, terwijl deze ongemoeid wordt gelaten als de Thread actief is en onderbroken wordt.
  2. The law of the distracted spearfisherman.
    De speervisser die constant één vis in de gaten houdt om deze te vangen wordt afgeleid zodra er ineens een hele school vissen voorbij komt en vangt zo niets. Hiermee bedoelt Kabutz te illustreren dat je van elke Thread goed moet weten waar die op dat moment mee bezig is.
  3. The law of the overstacked haberdashery
    Deze wet houdt in dat je moet zorgen dat het aantal Threads niet te groot wordt. De reden voor het gebruik van meerdere Threads moet altijd een verbeterde performance zijn. Bij een te grote hoeveelheid Threads gaat de performance er juist op achteruit. Hij gaf hierbij een demo waarmee hij aantoonde dat de JVM op zijn laptop de geest gaf bij ongeveer 9000 Threads.
  4. The law of South African crime
    Als je té slim probeert te zijn, kan je belangrijke informatie missen. Zo mag een Thread een instantievariabele voor zichzelf cachen, waardoor het niet zeker is of diverse Threads wel met dezelfde data werken. Oplossingen hiervoor zijn: deze variabele volatile maken, de variabele final maken, waardoor deze “bevriest” of de accessoren op de variabele gebruiken en deze synchroniseren.
  5. The law of the leaked memo
    De beeldspraak betreft het te vroeg bekend worden van een vertrouwelijke memo, waardoor dingen anders lopen dan gepland. Een JVM mag statements herordenen als het eindresultaat hetzelfde blijft. Deze beoordeling wordt echter gemaakt zonder context. Hij liet twee methodes zien die dezelfde variabelen gebruikten, maar afzonderlijk van elkaar probleemloos te herordenen waren. Door dit echter te combineren met aanroepen door verschillende Threads die tegelijk worden uitgevoerd kon de output totaal anders zijn dan verwacht.
  6. The law of corrupt politician
    Dit was een redelijk voor de hand liggende over het voorkomen van corrupte data doordat diverse Threads tegelijk met dezelfde data set werken. Oplossing hiervoor is het op de juiste manier afschermen van de data met een lock.
  7. The law of the micromanager
    Als alle gebruikelijke verdachten (CPU, geheugen, HD, netwerk) uitgesloten kunnen worden is het aannemelijk dat het bij performanceproblemen om een Thread gaat. Hij droeg hierbij een voorbeeld aan van iemand die een String-literal als lock-monitor gebruikte. Deze was dan wel in verschillende classes als aparte instantie gedefinieerd, maar zoals we allemaal weten is dezelfde String-literal op de achtergrond ook hetzelfde object. Hierdoor werd alles in deze applicatie door een lockobject opgehouden.
  8. The law of Greek driving
    In Griekenland kan je een bekeuring krijgen als je je niet aan de verkeersregels houdt, maar doordat er nagenoeg geen handhaving is, houdt bijna niemand zich aan de regels. Hetzelfde kan gezegd worden voor JVM’s. Voor een JVM gelden wel een aantal, vooral adviserende, regels, maar deze worden nauwelijks afgestraft. De JVM heeft dus veel interpretatie vrijheid. Hierdoor is het voor ontwikkelaars moeilijk 100% betrouwbare code te schrijven die door alle JVM exacte hetzelfde geïnterpreteerd wordt.
  9. The law of the sudden riches
    Zoals verre vrienden ineens goede vrienden worden als je de lotto wint, zo kan een stabiele systeem juist instabiele worden door het toevoegen van veel resources. (Snellere CPU, meer geheugen, sneller netwerk, meer schijfruimte). Vaak is de fout er al wel, maar komt deze beter naar voren. Zo is de kans op corrupte data groter op een systeem met 16 cores dan op een systeem met 2 cores, omdat er nu eenmaal meer zaken simultaan kunnen lopen.
  10. The law of the uneaten spinach
    Hierbij schetste Kabutz het beeld van de koppige vader die tegen zijn ven koppige dochter zegt dat ze niet naar bed mag voordat ze haar spinazie opheeft. Dit is duidelijk de deadlock. Een deadlock moet zo mogelijk voorkomen worden omdat de enige mogelijkheid om een echte deadlock te verhelpen het herstarten van de JVM is.

Al met al een van de betere sessies van vandaag. Wel veel bekende zaken gehoord, maar vooral nog steeds geschokt door het feit dat een JVM nauwelijks regels heeft om zich aan te houden en in sommige situaties dus zelfs aan de specs kan voldoen terwijl de uitkomsten van berekeningen totaal onjuist zijn. Brrrr…


© 2020 Java Competence Network. All Rights Reserved.