HP on alkanut myydä Quad-työasemia, joissa on 4 prosessoriydintä. Apple puolestaan on tarjonnut jo pitkään 2xQuad-työasemia, joissa on 8 prosessoriydintä. Tulevaisuuden trendi on selvästi yhä useammissa ytimissä. Intelin Nehalem ja Keifer-arkkitehtuurit tähtäävät ainakin kahdeksaan ytimeen suoritinta kohden ja huhuja on ollut jopa 32-ytimisistä prosessoreista.

Tietokoneiden keskusmuisti on kuitenkin aina jaettua kaikkien ytimien ja prosessorien kesken. Kun ohjelmoidaan perinteisillä ohjelmointikielillä, jotka voivat minä hetkenä hyvänsä muuttaa mitä tahansa muistialuetta, muisti täytyy lukita vähän väliä. Se aiheuttaa hitautta ja paljon potentiaalisia virhetilanteita. Tämä pätee erityisesti säieohjelmointiin, jossa käyttöjärjestelmän prosessisuojauksetkaan eivät auta.

[amazon 193435600X thumbnail] Erlang-ohjelmissa ei ole lainkaan jaettua muistia. Kun ohjelmoi Erlangilla, voi olla täysin varma siitä, että säikeet ja prosessit eivät ylikirjoita toistensa muistia. Mitään lukituksia ei tarvita, joten ohjelmien suoritus on erittäin tehokasta.

Lisäksi Erlangissa voi olla varma, että yhden ohjelman sisälläkään eri funktiot eivät ylikirjoita toistensa "omistamia" muuttujia, tai muuten vaikuta toisiinsa kuin paluuarvonsa kautta. Tämän vuoksi funktioita voidaan helposti suorittaa rinnakkain ajamalla ne omissa prosesseissaan. Erlangissa prosessien luominen ja ajaminen on tehty äärimmäisen kevyeksi verrattuna käyttöjärjestelmän prosessien luomiseen. Rinnakkaisia pieniä prosesseja voi olla satoja tai vaikka tuhansia. Mitä enemmän niitä on, sen paremmin ne hyödyntävät tilastollisesti kaikkia käytössä olevia prosessoriytimiä.

Eikä tässä vielä kaikki. Erlangissa prosesseja voidaan ajaa myös muissa koneissa, jotka ovat TCP/IP:llä kytköksissä toisiinsa. Mitä tahansa funktiota voidaan siis joko kutsua paikallisesti, ajaa se rinnakkaisesti omassa prosessissaan, tai ajaa se kokonaan toisessa koneessa. Kommunikointiin Erlangista löytyy yksinkertainen mutta tehokas viestinvälitysmekanismi sekä prosessien valvonta ja linkitys siten, että "kaatunut" prosessi havaitaan heti ja voidaan käynnistää uudelleen vaikka toisella palvelimella. Melkoinen työkalupakki omien klusteroitujen palvelujen rakentamiseen!

Erlangin opiskelu ei onnistu yhdessä illassa. Oppimista helpottaa aiempi tausta muista funktionaalisista kielistä, kuten esimerkiksi Schemestä, Elispistä tai XSLT:stä. Itse tilasin Amazonista kirjan Programming Erlang, joka toimii hyvänä oppaana kieleen tutustuessa. Se käsittelee ensin Erlangin perusteet ohjelmointikielenä, käy sitten läpi rinnakkaisohjelmoinnin (concurrent programming) ja etenee lopuksi hajautettuun ohjelmointiin (distributed programming).

Erlang on muuten mielestäni syntaksiltaan aika ruma kieli, joka muistuttaa lähinnä Prologin ja Lispin yhdistelmää. Se on ohjelmointi on kiehtovaa muttei kovin tyylikästä. Pitäisinkin mahdollisena, että jatkossa multicore-ohjelmoinnissa nousee suosituksi jokin toinen kieli samoilla ominaisuuksilla. Silti Erlangin opiskelu antaa hyvän pohjan rinnakkaiselle ja hajautetulle ohjelmoinnille, ja sen alusta tuntuisi olevan vakaa pohja sovellusten toteuttamiseen Linuxissa, Mac OS X:ssä ja Windowsissa.

Published 30.12.2008