Mi a ' atomitás ' pontos meghatározása a programozásban?

Az “atomitás” meghatározása szerint a tranzakciót képesnek kell lennie befejezni anélkül, hogy folyamat közben esetlegesen egyidejűleg futó műveletek érintenék vagy manipulálnák őket. De vajon ez azt is jelenti, hogy egy programnak nem szabad egyidejűleg futtatnia, ha állítólag atomi?

Mondjuk, hogy 2 program van példaként:

example_program1:

másodpercenként int = 1 és 100 között számít

minden szám új sorban nyomtatva van

example_program2:

csak ” hi ”

és egy szülőprogram, amely mindkét programot tartalmazza, és futtatja őket, miután jelet kap egy adott program indításához (pl. a sigaction segítségével linuxban) 2 verzióval:

1. verzió:

a jel fogadása után bármikor futtatja a programot (még egyidejűleg is)

ami azt jelenti, hogy a program2 képes nyomtatni ” hi “, miközben a program1 még mindig kinyomtatja a számokat

2. verzió:

csak egy-egy program futtatása

a másik program jele blokkolva van, amíg a folyamatban lévő program le nem áll

bben a példában

csak a 2. verzió atomi vagy mindkettőnek tekinthető? Ez a program csak akkor lenne nem atomi, ha pl. A program2 az eljárás során 1-gyel növelné az i értéket?

Megjegyzések

  • A atom ” (különböző) módon, különböző összefüggésekben használják. Néha nagyon hasonló, de mégis eltérő módon. Gyakran használják informálisan is. A kérdése egy olyan definícióval kezdődik, amely úgy tűnik, hogy az adatbáziselméleten alapul, de aztán a programokról szól. A definíciója ” tranzakciókról szól “, de a programjában nincsenek tranzakciók. ‘ valószínű, hogy ön akaratlanul is rosszul használja az ” atom ” definíciót. (Az atomitás definíciója szintén nem felel meg valójában annak a la ACID jelentésének ‘.)

Válasz

Ha egy X művelet atomi, akkor ez azt jelenti, hogy bárki, aki megfigyeli a műveletet, úgy látja, hogy még nem kezdődött el, vagy befejezett, és nem olyan állapotban, amely részben befejeződött. Ez az.

Nyilvánvaló, hogy ha kódot írsz egy X művelet végrehajtására, és más kód félig látja, vagy zavarja, akkor az X művelet végrehajtása nem atomi.

Bizonyos esetekben egy „atom” művelet sikeres lehet vagy meghiúsulhat; ha egy ilyen atomi művelet meghiúsul, akkor a hatásnak pontosan meg kell egyeznie azzal, mintha a műveletet soha nem indították volna el.

Megjegyzések

  • Megjegyzésként megjegyzem, hogy ezt jelenti az Izolálás az ACID-ben, nem pedig az Atomicitás. ‘ nem világos, hogy A meghatározás célja, hogy egybeessen / lefedje az atomosság ACID-fogalmát (ami nem ‘ nem rettenetesen releváns az önkényes kódok szempontjából).

Válasz

Nem vagyok biztos abban, hogy ismerek egy egyszerű, formális, elvont definíciót az “atom” programozási nyelvhez. Sok különbözőt ismerek az absztrakció különböző szintjein és különféle témák tekintetében. Ismerek olyanokat is, amelyek meglehetősen elvontnak tűnnek, de meglehetősen kifinomult előfeltételekkel rendelkeznek (pl. A párhuzamosság előtti modelljei). A probléma része, hogy nagyon sokféle módon lehet azt mondani, hogy két program “egyenértékűen viselkedik”, és egyes definíciók tiszteletben tartják az “egyenértékű” különböző fogalmait.

Egy vázlat (amit készítek) Az egyik megközelítés a párhuzamosság interleave modelljéhez viszonyítva: Az operatív szemantikát figyelembe véve az utasítássorozatot atomszerűen hajtják végre , ha az összes állítás (az operatív szemantika), amely ezeket az utasításokat magában foglalja, sorrendben történik. Az utasítások sora atom az összes lehetséges átmeneti szekvencia atomosan hajtja végre az állítások sorrendjét. Lazíthatnánk ezt egy “ mintha atomszerűen hajtották volna végre”, amelyet formalizálni kezdhetünk azzal, hogy az összes lehetséges átmenetsorozat egyenértékű ( feltehetően megfigyelési szempontból egyenértékű) az állításokat atomszerűen végrehajtó átmenetek sorozatával.

B aszimikusan az atomikusan végrehajtott azt jelenti, hogy ha elkezdünk végrehajtani egy bizonyos utasítássorozatot, nem szúrjuk be a végrehajtás bármely más utasítását a sorozat végrehajtásába.A megvalósítás szempontjából ez azt jelentheti, hogy egyszerre csak egy szálat hajtunk végre, mint a szálak időbeli szeletelésénél, és az atomikusan végrehajtott utasítások sorozata azt jelenti, hogy végrehajtásuk során nem voltak kontextuskapcsolók. A fenti definíciónak van egy olyan kérdése, hogy nem igazán kezeli jól a szálak közötti koordinációt. Nem lenne értelme azt mondani, hogy például két szál közötti csatorna mentén folytatott kommunikáció mindig atomi volt. (Gyakran arról beszélünk, hogy az adatstruktúrán végzett műveletek atomi jellegűek, és ez valószínűleg megfelelőbb lenne ebben a példában. A meghatározás az adatstruktúrára vonatkozik.)

A példaprogramunkhoz és egy működési szemantika, ahol egy print utasítás egyetlen átmenetben kezelhető, akkor a 2. program mindig atomszerűen kerül végrehajtásra, és (meglehetősen triviálisan) atom. A második végrehajtás egy olyan forgatókönyvet ír le, ahol az 1. program atomi módon kerül végrehajtásra, míg az első nem. Ha volt valami olyan mechanizmus, amely garantálta, hogy a második végrehajtás mindig megtörténjen, akkor azt mondhatnánk, hogy az 1. program (ezzel a mechanizmussal) atomi volt, de egyébként feltehetően nem lenne önmagában atom.

Amint azt a Megjegyzés: az “atom” -ot gyakran informális és / vagy megvalósítás-orientált értelemben használják. Ezért gyakran nem világos, hogy mit pontosan szánnak, bár a szándék szelleme általában ésszerű.

Válasz

Az Atomic mély, sötét ősi eredete a programozásban az ATOMIC szerelési nyelv utasítására utal. Ugyanúgy, ahogy az egyes részecskék egy csoportja (proton, neutron, elektron) egyetlen törhetetlen egységet alkot, amelyet atomnak nevezünk, az ATOMIC programozásában az összeszerelési utasítások csoportjára utal, amelyek egyetlen megszakíthatatlan egység utasítást alkotnak. . Az első szerelési utasítás az ATOMIC, amely felfüggeszti az összes megszakítást, amíg a megszakításokat újra nem kezdik valami hasonlóval, mint az UNATOMIC.

Azóta az ATOMIC szót durván visszaélik a marketing. Egyetlen utasítás hívása az ATOMIC-nak csak butaság.

Az ATOMIC eredetileg betűszó volt, azt hiszem, ez “A többszörös utasítási klaszterek seT?” Lehet – sajnálom, nem biztos a T-ben, ez már megtörtént sok éven át.

Megjegyzések

  • Calling a single instruction ATOMIC is just silly Nos, voltak atomi egynél több buszciklust tartalmazó memóriaátvitel, valamint utasítások, például a Test And Set .

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük