Tietyllä abstraktiotasolla esitettynä rinnakkaiset järjestelmät koostuvat toisistaan (jossakin mielessä) riippumatta suoritettavista sarjaprosesseista, ja näiden kommunikaatioista. Kommunikaation voidaan ajatella tapahtuvan joko synkronisesti tai asynkronisesti. Näiden käsiteparien merkitys riippuu abstraktiotasosta; rautapuolella "synkronisuus" viittaa siihen, sitooko jokin kellosignaali kommunikaation osapuolia toisiinsa. Käyttämälläni abstraktiotasolla "synkroninen" viittaa siihen, että kommunikaation osapuolten pitää olla valmiita kommunikaatioon yhtä aikaa. "Asynkroninen" kommunikaatio puolestaan viittaa siihen, että viesti (abstraktisti ajateltuna) kirjoitetaan ensin johonkin, jonka jälkeen viestin lähettäjä voi jatkaa toimintaansa, ja viesti voidaan lukea milloin tahansa tämän jälkeen.
Täytyy ymmärtää, että asynkroninen contra synkroninen kommunikaatio on yksinkertaisesti abstraktioon liittyvä asia, sillä ei ole "todellisessa" maailmassa mitään kiinteää vastinetta, vaan abstraktiota muuttamalla voidaan tarkalleen sama järjestelmä mallintaa toisin. Esimerkiksi voimme ajatella kirjeen lähetyksen "asynkroniseksi" kommunikaatioksi. Mutta jos mallinnamme väliin postimiehen, jolle kirje pitää ojentaa, ja joka ojentaa kirjeen vastaanottajalle, muuttuu kommunikaatio synkroniseksi. Jos taas otamme malliin mahdollisuuden, että kirje pudotetaan postilaatikkoon, josta postimies noutaa sen, ja vain pudottaa kirjeen postiluukusta vastaanottajalle, se muuttuu jälleen asynkroniseksi. Ja niin edelleen. "Todellisen maailman" kommunikaation synkronisuus contra asynkronisuus on aina abstraktiotason sopimiseen liittyvä kysymys.
Yksi melko ajankohtainen hahmotustapa jaettujen muuttujien avulla tapahtuva kommunikaatio, ja sitä käyttävän järjestelmän oikeellisuuden toteaminen. Jaetuilla muuttujilla tarkoitetaan vain sitä, että meillä on useampi prosessi (esim. yksinkertainen tietokoneohjelman pätkä) joka voi lukea ja kirjoittaa samoja muuttujia. Tämä tapahtuu asynkronisesti, kun abstraktiotasolla muuttujat ovat jotain, joita voidaan koska tahansa muuttaa. Mutta jos muuttuja ymmärretään "prosessiksi", jolla on oma "tila", eli muuttujan arvo, voidaan jälleen kerran ajatella kaiken kommunikaation tapahtuvan synkronisesti.
Paikallisilla on tiettyjä keinoja, joilla jaettuja muuttujia käyttäviä rinnakkaisia prosesseja muunnetaan synkronisiksi malleiksi, aivan erityisesti CSP-kielellä mallinnettaviksi. Kyseessä ei ole oikeastaan mikään "oikea" ohjelmointikieliä, vaan kieli, jolla voidaan kuvata olennaiset osat kommunikaatiosta. Olennaiset siinä mielessä, että tämänkaltaisten järjestelmien virheet ovat yleensä seurausta jonkinlaisesta epädeterminismistä, joka voi olla seurasta taas siitä, että prosessit voivat edetä eri nopeudella. Tavoitteena on varmistaa, että tällainen epädeterminismi ei tuota odottamatonta käytöstä, so. se ei ole oikeaa epädeterminismiä, vaan ainoastaan mallinnoksen abstraktiotasoon liittyvä asia.
Muitakin kysymyksiä tietenkin on mahdollista esittää, ja ne ovatkin usein mielenkiintoisempia. Esimerkiksi ei ole aina välttämätöntä, että järjestelmä tekee olennaiset asiat tarkalleen samassa järjestyksessä, kunhan se tekee ne olennaisilta osin oikeassa järjestyksessä.
1 kommentti:
Ehdotan seuraavaksi otsikoksi "Voiko herrasmies pitää hametta?" ja haastaan kaikki mukaan nejän sanan hinnalla keksimään tähän blogiin otsikoita jotka lukija erottaa toisistaan.
Lähetä kommentti