Mikä on ' atomiteetin ' tarkka määritelmä ohjelmoinnissa?

”atomiteetin” määritelmässä sanotaan, että tapahtuma on voitava lopettaa ilman, että prosessin aikana mahdollisesti samanaikaiset käynnissä olevat toiminnot koskettavat sitä tai manipuloi sitä. Mutta merkitseekö tämä myös sitä, että ohjelmaa ei pidä suorittaa samanaikaisesti, kun sen oletetaan olevan atominen?

Sanotaan, että meillä on esimerkkinä 2 ohjelmaa:

esimerkki_ohjelma1:

laskee int i = 1 – 100 sekunnissa

jokainen numero tulostetaan uudella rivillä

example_program2:

tulostaa vain ” hi ”

ja pääohjelma, joka sisältää molemmat näistä ohjelmista ja suorittaa ne heti, kun se vastaanottaa signaalin tietyn ohjelman käynnistämiseksi (esim. kautta sigaction Linuxissa) 2 versiolla:

versio 1:

suorittaa ohjelman (jopa samanaikaisesti) milloin tahansa, kun signaali on vastaanotettu

mikä tarkoittaa, että ohjelma2 voi tulostaa ” hi ”, kun ohjelma1 vielä tulostaa numeroita

versio 2:

vain suorita yksi ohjelma kerrallaan

signaali toiselle ohjelmalle estetään, kunnes käynnissä oleva ohjelma on päättynyt.

tässä esimerkissä voi vain Versiota 2 voidaan pitää atomina vai molempina? Olisiko tämä ohjelma ei-atominen vain, jos esim. Ohjelma2 lisäisi i: tä yhdellä prosessin aikana?

Kommentit

  • Termi ” atomi ” käytetään (useilla) eri tavoilla eri tilanteissa. Joskus hyvin samankaltaisilla, mutta silti eri tavoilla. Sitä käytetään usein myös epävirallisesti. Kysymyksesi alkaa määritelmällä, joka näyttää perustuvan tietokantateoriaan, mutta sitten puhuu ohjelmista. Määritelmäsi puhuu ” -tapahtumista ”, mutta ohjelmassa ei ole tapahtumia. ’ todennäköisesti käyttää väärin ” atomin ” määritelmää. (Atomiteettimäärittelysi ei myöskään vastaa ’ t todella sen merkitystä a la ACID.)

Vastaa

Jos operaatio X on atominen, se tarkoittaa, että jokainen operaation tarkkailija näkee sen joko vielä aloittamattomana tai valmiina eikä missään osittain valmiissa tilassa. Siinä se.

On selvää, että jos kirjoitat koodin suorittamaan toiminnon X, ja muu koodi voi nähdä sen puoliksi suoritettuna tai häiritä sitä, operaation X toteutus ei ole atominen.

Joissakin yhteyksissä ”atomitoiminto” voi onnistua tai epäonnistua; jos tällainen atomitoiminto epäonnistuu, vaikutuksen on oltava täsmälleen sama kuin jos operaatiota ei olisi koskaan aloitettu.

Kommentit

  • Huomaa, että eristäminen tarkoittaa ACID: ssä, ei sitä, mitä Atomicity tarkoittaa. Se ’ ei ole selvää, jos Määritelmän on tarkoitus olla yhtäpitävä / kattava ACID-atomikäsite (joka ei ’ ole hirvittävän merkityksellinen mielivaltaiselle koodille).

Vastaus

En ole varma, että tiedän yksinkertaisen, muodollisen, abstraktin määritelmän ”atomista” ohjelmointikielelle. Tunnen monia erilaisia abstraktion eri tasoilla ja eri aiheista. Tunnen myös joitain, jotka näyttävät melko abstrakteilta, mutta joilla on melko hienostuneet ennakkoedellytykset (esim. Samanaikaisuuden presheaf-mallit). Osa ongelmasta on se, että on olemassa monia erilaisia tapoja sanoa kahden ohjelman ”käyttäytyvän” ”vastaavasti” ja jotkut määritelmät saattavat kunnioittaa erilaisia ”vastaavan” käsitteitä.

Luonnos (jonka minä teen yksi lähestymistapa lomittavaan samanaikaisuusmalliin on: Kun otetaan huomioon operatiivinen semantiikka, lausejoukko suoritetaan atomisesti jos kaikki (operatiivisen semantiikan) siirtymät, jotka sisältävät näitä lauseita, tapahtuvat peräkkäin. Lausekesarja on atomi jos kaikki mahdolliset siirtymäsekvenssit toteuttavat lauseiden sarjan atomisesti. Voisimme löysätä tämän ” ikään kuin ne toteutettaisiin atomisesti”, jonka voimme alkaa muodostaa sanomalla, että kaikki mahdolliset siirtymäsekvenssit ovat samanarvoisia oletettavasti havainnollisesti vastaava) siirtymäsekvenssille, joka suorittaa lausekkeet atomisesti.

B Atomisesti suoritettu tarkoittaa myös sitä, että kun aloitamme jonkin lausejärjestyksen suorittamisen, emme lomittele mitään muuta käskyä sekvenssin suoritukseen.Toteutuksen kannalta tämä voi tarkoittaa sitä, että suoritamme vain yhden ketjun kerrallaan, kuten säikeiden ajallisesti viipaloidussa toteutuksessa, ja atomijärjestyksessä suoritettujen lauseiden sarja tarkoittaa, että niiden suorituksen aikana ei ollut kontekstikytkimiä. Edellä esitetyllä määritelmällä on ongelma, koska se ei oikeastaan käsittele ketjujen välistä koordinaatiota. Ei olisi järkevää sanoa, että esimerkiksi kahden säikeen välinen viestintä kanavalla oli aina atomia. (Usein puhutaan tietorakenteen toiminnoista atomisina, ja se olisi todennäköisesti sopivampaa tässä esimerkissä. Määritelmä olisi ominainen tietorakenteelle.)

Esimerkkiohjelmallesi ja olettaen, että operatiivinen semantiikka, jossa print -lauseketta voitaisiin käsitellä yhdessä siirtymässä, ohjelma 2 toteutettaisiin aina atomisesti ja se on (melko triviaalisesti) atominen. Toinen suorituksesi kuvaa tilannetta, jossa Ohjelma 1 suoritetaan atomisesti, kun ensimmäinen ei. Jos jokin mekanismi takaa, että toinen suorituksesi aina tapahtui, niin voit sanoa, että Ohjelma 1 (tällä mekanismilla) oli atominen, mutta muuten se ei luultavasti ole itsessään atominen.

Kuten mainitsin kommentti, ”atomia” käytetään usein epävirallisessa ja / tai toteutuslähtöisessä merkityksessä. Siksi mitä tarkalleen tarkoitetaan, on usein epäselvä, vaikka tarkoitetun henki on yleensä kohtuullinen selvä.

Vastaa

Sana Atomicin syvä tumma muinainen alkuperä ohjelmoinnissa viittaa kokoonpanokielen opetukseen ATOMIC. Samalla tavalla kuin ryhmä yksittäisiä hiukkasia (protoni, neutroni, elektroni) muodostaa yhden rikkoutumattoman yksikön, jota kutsutaan atomiksi, ATOMIC viittaa ohjelmoinnissa ryhmään asennusohjeita, jotka muodostavat yhden keskeytymättömän yksikön käskyn . Ensimmäinen kokoonpano-ohje on ATOMIC, joka keskeyttää kaikki keskeytykset, kunnes keskeytykset aloitetaan uudelleen jollain tavalla kuin UNATOMIC.

Sittemmin ATOMIC-sanaa on käytetty väärin markkinoinnissa. Yhden käskyn soittaminen ATOMICille on vain typerää.

ATOMIC oli alun perin lyhenne, luulen, että se saattoi olla ”Useiden käskyjen klustereiden seT?” – Anteeksi, et ole varma T: stä, se on ollut monta vuotta.

Kommentit

  • Calling a single instruction ATOMIC is just silly hyvin, atomia muistinsiirrot, joissa on useampi kuin yksi väyläjakso, sekä ohjeet, kuten Test And Set .

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *