Wednesday, March 12, 2014

Trådtest

Dato:
12 Mar 2014
Varighed:
8 timer

Status

Kode til test af tråde er færdig, men ikke testet.

Mål

Test og tilpas kode så trådenes opførsel bliver tydelig.
Præsenter resultater på bloggen.

Test af prioriteterne

I denne test startes 2 tråde (T1 og T2) fra main tråden. Begge tråde venter på at få lov at køre, og får vha. en gate lov til at køre samtidig. Main-tråden yielder uafbrudt, imens hver workertråd beregner primtal imellem 1 og 2000, og skriver antallet af beregnede primtal divideret med 1000 ud i displayet. Grunden til beregningerne er at de tager tid, så jeg kan nøjes med at skrive forholdsvis små tal ud i displayet; opdateres displayet for ofte kan tallene ikke læses/sammenlignes.
For dette program er der lavet 2 test:

  1. Begge tråde har samme prioritet (samme som main-tråden)
  2. T1 har PRIORITY_MIN prioritet og T2 har PRIORITY_MAX prioritet.
Begge tråde er daemon-tråde til main, men testen er også forsøgt (med samme resultat), hvor dette ikke er tilfældet. Koden hvor T1 og T2 er daemons er vedhæftet nederst på siden, da den er mest overskuelig.

Første test:


Ud fra denne test vil jeg mene at trådene følges ad, som forventet for adfærd af 2 tråde der laver samme arbejde og har samme prioritet.

Anden test:


Ud fra denne test vil jeg mene at trådene følges ad, ligesom testen hvor trådene har samme prioritet. Jeg ville forvente at tråd 2 enten var den eneste der talte op eller at tråd 2 talte mærkbart hurtigere op. Første forventning er baseret på en beskrivelsen af at processer-prioritet altid forfordeles til den højest prioriterede tråd, der er klar (begge tråde er altid klar) og anden er baseret på en form for Aging af tråde. Med Aging mener jeg at en tråd med tiden får højere prioritet, hvis den ikke kommer til når den vil, for at sikre at ingen tråde udsættes for udsultning.
Desværre er ingen af mine to forventninger opfyldt. Den adfærd der ses her er, vil jeg mene, at trådenes prioritet ignoreres.

Herunder har jeg lavet grafer over kørsler af de to test:



De to grafer har faktisk hver 2 tråde repræsenteret, men de føles så tæt, at det kan være svært at få øje på forskellen...

Konklussion

Eftersom mit OS ikke understøtter logging af information på trådiveau for den version leJOS har valgt at benytte, kan jeg desværre ikke se hvilken nice-prioritet, der faktisk gives for hver tråd. Jeg vil dog på baggrund af særligt graferne vurdere at prioriter af tråde i java ikke fungerer på det system jeg har at arbejde med: Dette kommer noget bag på mig, da det er Oracle der har leveret det JRE[2] der benyttes af leJOS. Med mindre folkene bag leJOS har skjult endnu et jre som det hemmeligt afvikler i steden for dette jre, så er problemet et generelt problem for Oracles arm-arkitektur JRE.

Referencer

1. https://sites.google.com/site/digikaison/ThreadTester2.java
    https://sites.google.com/site/digikaison/PrimeCruncher.java

No comments:

Post a Comment