Haku

Java-pohjaiset ohjelmalliset transaktiomuistit

QR-koodi

Java-pohjaiset ohjelmalliset transaktiomuistit

Erilaiset järjestelmät suorittavat nykypäivänä yhä enemmän rinnakkaista laskentaa prosessorien ja niiden laskentaytimien lukumäärän kasvaessa. Tämän seurauksena perinteiset lukkoihin perustuvat rinnakkaisuuden hallintamenetelmät tulevat koko ajan monimutkaisemmiksi käyttää ja implementoida. Ohjelmalliset transaktiomuistit ovat vaihtoehto perinteisille lukkoihin perustuville rinnakkaisuuden hallintamenetelmille. Ne lupaavat estää yhden perinteisten lukkojen pahimmista haittapuolista, eli lukkiutumien tapahtumisen, sekä yksinkertaistaa rinnakkain suoritettavan koodin kirjoittamista.

Tässä pro gradu -tutkielmassa käytettiin tutkimusmenetelmänä teknologiavertailua, jonka tavoitteena oli selvittää ovatko ohjelmalliset transaktiomuistit varteenotettava vaihtoehto perinteisille lukkoihin perustuville ratkaisuille. Tutkielmassa kahteen valittuun synkronointiongelmaan, eli tuottaja-kuluttaja- ja lukija-kirjoittaja-ongelmaan, luotiin ratkaisut käyttäen yleiskatsauksessa valittuja erilaisia Javaan pohjautuvia ohjelmallisia transaktiomuistitoteutusvaihtoehtoja. Vertailun vuoksi synkronointiongelmiin tehtiin myös perinteisiin lukkoihin perustuvat toteutukset. Luotuja toteutuksia mitattiin ja vertailtiin tämän jälkeen käyttäen valittuja mittausparametreja.

Saatujen mittaustulosten perusteella tutkimukseen valitut ohjelmalliset transaktiomuistit erosivat huomattavasti toisistansa sekä helppokäyttöisyyden että suorituskyvyn osalta. Deuce STM on huomattavasti helppokäyttöisempi kuin ScalaSTM, mutta kääntöpuolena sen suorituskyky on useissa tilanteissa huomattavasti heikompi. Myös molempien ohjelmallisten transaktiomuistien käyttämät vuonohjausmekanismit eroavat huomattavasti toisistansa. Lukkopohjainen toteutus suoriutui kuitenkin yleensä ottaen molempia ohjelmallisia transaktiomuistitoteutuksia paremmin.

Tutkimuksen perusteella vaikuttaisi, että käytettäessä Java-ohjelmointikieltä, perinteisiin lukkoihin perustuva rinnakkaisuudenhallinta on vielä toistaiseksi ohjelmallisia transaktiomuisteja parempi vaihtoehto. Jos ratkaistava synkronointiongelma on hyvin monimutkainen ja sen ratkaisemisen tueksi ei löydy Java-ohjelmointikielestä valmiita mekanismeja, nousee hyvin optimoitu ohjelmallinen transaktiomuisti, kuten ScalaSTM, varteenotettavaksi vaihtoehdoksi. Lisäksi jos synkronointiongelmaan kuuluu huomattavasti enemmän lukuoperaatioita suhteessa kirjoitusoperaatioihin, voi ohjelmallinen transaktiomuistitoteutus tarjota mahdollisesti jopa suorituskyvyn lisäystä verrattuna perinteisiin lukkopohjaisiin ratkaisuihin.

Tutkielmassa keskityttiin tarkastelemaan kahta eri synkronointiongelmaa käyttäen kahta eri Java-pohjaista ohjelmallista transaktiomuistitoteutusta sekä yhtä lukkoihin perustuvaa toteutusta. Tämä rajoittaa tutkielmassa saatujen tuloksien yleistettävyyttä.

Tallennettuna: