Samanaikaisohjelmointi C++20-ohjelmointikielen avulla
Nikki, Joni (2021)
Nikki, Joni
2021
Tietojenkäsittelytieteiden kandidaattiohjelma - Bachelor's Programme in Computer Sciences
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-06-03
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202105265489
https://urn.fi/URN:NBN:fi:tuni-202105265489
Tiivistelmä
Samanaikaisohjelmoinnin tarve ilmenee luonnollisesti monisäikeistetyssä ympäristössä, jossa jaettujen resurssien omistajuutta on hallittava eri ohjauksen synkronointimekanismein. Moniytimellisissä järjestelmissä fyysisten ytimien yhteisen laskennallisen tehon valjastamiseksi on tehtävä ilmaistava sen koostavilla alitehtävillä, jotka suorittavien aliohjelmien laskentojen tuloksien koostuma edustaa tehtävän tulosta. Luonnollisesti seuraa, että samanaikaisuuden ilmaiseminen on nykypäivän tyypillisissä ohjelmistoympäristöissä suoritettavien ohjelmien ilmeinen tarve.
Tässä tutkielmassa käsitellään C++20-standardin määrittelemän C++-ohjelmointikielen kykenevyyttä samanaikaisten ja rinnakkaisten ongelmien ilmaisemisessa sikäli kuin ilmaisun mahdollistaa standardin määrittelemä standardikirjasto tai C++20:ssa lisätyt vuorottaisrutiinit. Tekstissä osoitetaan, että C++20 tarjoaa keinoja niin kilpailevan samanaikaisuuden kuin yhteistyömoniajon harjoittamiseen ja että vuorottaisrutiinit ovat ilmaisuvoimainen ja suorituskyvyllisesti etevä tapa toteuttaa tyypillisiä samanaikaisohjelmoinnissa käytettyjä rakenteita ja idiomeja.
Kirjallisuuskatsauksena toteutetussa tutkielmassa painotettiin lähteitä, jotka käsittelivät vuorottaisrutiineja samanaikaisohjelmoinnin työkaluna, ja joiden avulla pystyttiin kartoittamaan vuorottaisrutiineille ominaisia sovellusalueita. Esimerkiksi huomataan, että vuorottaisrutiinit korvaavat osin FSM:n (Finite State Machine) ja CPS:n (Continuous Passing Style) sovellusalueita niiden ergonomisuuden vuoksi ja että vuorottaisrutiinien edellyttämä kekovaraus on vältettävissä tiettyjen ehtojen täyttyessä, mikä parantaa niiden käyttöönottoastetta sulautetuissa ja muuten niukkaresurssisissa järjestelmissä.
Tutkielmassa perehdytään myös siihen, miten C++:n samanaikaisuuden ja rinnakkaisuuden ilmaisukeinoja voisi vielä parantaa. Todetaan, että standardikirjaston tuki hajautetuille järjestelmille on olematonta, minkä takia hajautettua laskentaa harjoittava ohjelma on työlästä toteuttaa C++:lla ja että vuorottaisrutiinien kirjastotuki jää minimaaliseksi, missä ohjelmoijan on tehtävä itse yleisiä vuorottaisrutiinitoteutuksia kuten generator ja task.
Tässä tutkielmassa käsitellään C++20-standardin määrittelemän C++-ohjelmointikielen kykenevyyttä samanaikaisten ja rinnakkaisten ongelmien ilmaisemisessa sikäli kuin ilmaisun mahdollistaa standardin määrittelemä standardikirjasto tai C++20:ssa lisätyt vuorottaisrutiinit. Tekstissä osoitetaan, että C++20 tarjoaa keinoja niin kilpailevan samanaikaisuuden kuin yhteistyömoniajon harjoittamiseen ja että vuorottaisrutiinit ovat ilmaisuvoimainen ja suorituskyvyllisesti etevä tapa toteuttaa tyypillisiä samanaikaisohjelmoinnissa käytettyjä rakenteita ja idiomeja.
Kirjallisuuskatsauksena toteutetussa tutkielmassa painotettiin lähteitä, jotka käsittelivät vuorottaisrutiineja samanaikaisohjelmoinnin työkaluna, ja joiden avulla pystyttiin kartoittamaan vuorottaisrutiineille ominaisia sovellusalueita. Esimerkiksi huomataan, että vuorottaisrutiinit korvaavat osin FSM:n (Finite State Machine) ja CPS:n (Continuous Passing Style) sovellusalueita niiden ergonomisuuden vuoksi ja että vuorottaisrutiinien edellyttämä kekovaraus on vältettävissä tiettyjen ehtojen täyttyessä, mikä parantaa niiden käyttöönottoastetta sulautetuissa ja muuten niukkaresurssisissa järjestelmissä.
Tutkielmassa perehdytään myös siihen, miten C++:n samanaikaisuuden ja rinnakkaisuuden ilmaisukeinoja voisi vielä parantaa. Todetaan, että standardikirjaston tuki hajautetuille järjestelmille on olematonta, minkä takia hajautettua laskentaa harjoittava ohjelma on työlästä toteuttaa C++:lla ja että vuorottaisrutiinien kirjastotuki jää minimaaliseksi, missä ohjelmoijan on tehtävä itse yleisiä vuorottaisrutiinitoteutuksia kuten generator ja task.
Kokoelmat
- Kandidaatintutkielmat [8996]