keskiviikko 11. maaliskuuta 2009

Luento 17 - Viestinvälityssamanaikaisuus

Viestinvälityssamanaikaisuudessa on kysymys samanaikaisuuden toisesta osajoukosta. Edellisessä postauksessa käsittelin tämän asian rinnakkaista käsitettä, yhteismuistisamanaikaisuutta.

Tätä blogia voidaan pitää viestinvälityksen mediumina. Minä kirjoittajana olen viestin lähettäjä. Lukijoita voidaan pitää vastaanottajina. Toisaalta kommentin jättävä lukija on puolestaan lähettäjä ja minä sekä muut lukijat vastaanottajia. Viestinvälityksessä on siis kolme oleellista komponenttia: lähettäjä, medium (median yksikkö) sekä vastaanottaja.

Viestinvälitystä voidaan varioida monin eri tavoin. Tämä näkyy muun muassa käytetyistä standardeista (TCP/IP, UDP/IP ym.), jotka kukin tarjoavat oman tapansa toimittaa viestejä perille. Riippuen käytetystä menetelmästä voidaan esimerkiksi taata, että viestit saapuvat perille lähetysjärjestyksessä. Menetelmä voi ottaa kantaa myös viestinvälityksen luotettavuuteen.

Mielenkiintoinen variantti on tapaus, jossa lähettäjä ei voi lähettää viestiä ennen kuin vastaanottaja on valmiina vastaanottamaan sen. Tällöin puhutaan kohtaamisesta tai tunnetummin ns. rendezvous-menetelmästä.

Olin kuullut kohtaamisesta aiemmin Adan yhteydessä. Luento kuitenkin selkeytti käsitettä hieman. Kenties hieman yllätyksellisesti kohtaamista voidaan pitää muiden menetelmien prototyyppinä, jonka avulla haluttua menetelmää voidaan matkia. Tuntuukin luontevalta, että klassinen tuottaja-kuluttaja -ongelma ratkeaisi sitä käyttäen mallikkaasti.

Kohtaamiseen pohjautuen on mallinnettu erityisiä viestikieliä. Näistä luennolla esiteltiin Hoaren CSP (Communicating Sequential Processes) sekä piilaskento. CSP:tä voidaan pitää vähemmän matemaattisesti orientoituneen kannalta helpompana.

CSP on imperatiivisen kieleen lisättävä laajennus, joka mahdollistaa erityisten kanavien (vrt. medium) käyttämisen. Oleellisesti kanavien kautta voidaan huolehtia viestinnästä edellä esitellyn kohtaamisen tavoin.

CSP vaikuttaa varsin mielenkiintoiselta, koska se näyttää tuovan luontevan ratkaisun moniin samanaikaisuuden ongelmiin. Käytännössä en ole joutunut kiinnittämään huomiota samanaikaisuuteen. Kuitenkin on selvää, että laskentatehon, erityisesti rinnakkaisen, lisääntyessä niiltä, jotka rohkenevat kutsua itseään ohjelmoijiksi, vaaditaan myös samanaikaisuuden hallinnan taitoja.

Löysin sattumalta Hoaren Communicating Sequential Processes -kirjan. Samalla löytyi myös toinen varsin mielenkiintoinen paikka. En ole mikään CSP-guru, mutta näin nopealla tutustumisella asiaan se vaikuttaa opettelemisen arvoiselta tekniikalta. Sattumalta löysin myös Pythonille toteutetun CSP-laajennoksen. Se näkyy olevan saataville myös useille muille kielille.

Tässä yhteydessä en osaa sanoa sen syvällisempää CSP:stä. Kuitenkin luento osoitti minut tässä suhteessa oikeaan suuntaan. Luennon toista pääasiaa, piilaskentoa tuskin tulen käyttämään yhtä paljon. Konstruktiona piilaskento on kuitenkin aika jännä.

Piilaskento, kuten CSP:kin, lähtee liikkeelle kanavan käsitteestä. Itse asiassa kaikki ajatellaan piilaskennossa kanavan käsitteen kautta. Se pyrkiikin olemaan samanaikaisuudelle sama asia, kuin lambdalaskento on ei-samanaikaisille (sekventiaalisille?) kielille.

Luennon suurin anti oli kenties sen antama näköala eri mahdollisuuksiin huolehtia viestinvälityksestä. Sinällään aihe on kannaltani varsin oleellinen. Olen joutunut miettimään viestinvälitystä useaan otteeseen omassa pienessä käyttöliittymäkirjastoprojektissani. CSP:n kaltainen ratkaisu voisi olla kenties tässä suhteessa potentiaalinen. Pitääkin selvittää jossain vaiheessa, miten samanaikaisuutta voi/kannattaa/pitää ottaa huomioon tämän tyylisessä projektissa.

Samanaikaisuuteen tulen törmäämään myös kuvankäsittelyssä. Kuvankäsittelyn tapauksessa tietyntyyppisiä operaatioita voidaan suorittaa hyvin tehokkaasti rinnakkain. Toisaalta tietyntyyppiset operaatiot (esim. kerneliin pohjautuvat operaatiot, kuten sumennus) ovat ongelmallisia ja tarvitsevatkin hieman toisenlaista tapaa ajatella. Onkin kyseenalaista kannattaako näitä operaatioita suorittaa rinnakkain ja jos kannattaa niin miten se on edullisinta.

Ei kommentteja:

Lähetä kommentti