communicating sequential processes (tsz. communicating sequential processeses)
A CSP azt az elvet követi, hogy:
Egy rendszer több független folyamatból áll, amelyek csak üzenetek révén kommunikálnak, és nem osztanak meg közös memóriát.
Ez radikálisan eltér a hagyományos, megosztott memóriás szinkronizációs modellektől (mint például mutexek, szemináriumok), és inkább a hálózaton keresztüli kommunikációhoz vagy aktormodellekhez hasonlít.
P = a → b → STOP
jelentése: hajtsa végre az a
eseményt, majd a b
-t, majd álljon le
read
, write
, send
, receive
c!v
egy érték (v) küldése a c
csatornánc?x
egy érték fogadása, amit változóba (x
) ment
a → P
→ hajtsa végre az a
eseményt, majd folytassa a P
folyamattal
P || Q
→ P
és Q
egyszerre futnak, és szinkronizálódnak közös eseményekre
a → P □ b → Q
→ választható az a
vagy b
, attól függően, melyik történik meg előbb
Ha P = c!5 → STOP
és Q = c?x → STOP
, akkor P || Q
→ a c.5
esemény csak akkor történik meg, ha mindkét folyamat készen áll
X = a → X
→ végtelenül ismétli az a
eseményt
Képzeljük el, hogy van egy producer és egy consumer, akik egy értéket cserélnek:
Producer = produce!x → STOP
Consumer = produce?y → STOP
System = Producer || Consumer
produce
egy csatornaSystem
csak akkor haladhat tovább, ha a producer küld, és a consumer fogad – ez a CSP szinkron kommunikáció kulcsa
A CSP formálisan a következőkkel dolgozik:
)Ez lehetővé teszi a folyamatok viselkedésének matematikai összehasonlítását, például: P ⊑ Q
(P refine-olja Q-t)
goroutine
+ channel
szinkronizáció = CSP ihlettex := <-ch
és ch <- x
crossbeam
és tokio
csatornák CSP-szerű viselkedést valósítanak meg
Clock = tick → Clock
Sensor = measure → send!data → Sensor
Controller = send?d → process(d) → Controller
System = Sensor || Controller
Sensor
periodikusan mér és küld adatotController
csak akkor tud feldolgozni, ha kap adatotSystem
a két folyamat párhuzamos együttműködését modellezi
Tulajdonság | CSP | Actor Model |
---|---|---|
Kommunikáció típusa | Szinkron (két fél egyszerre) | Aszinkron (üzenetküldés postán) |
Memóriamegosztás | Nincs | Minden aktor saját állapottal bír |
Tipikus nyelv | Occam, Go | Erlang, Akka |
A CSP egy elegáns, formális eszköz arra, hogy párhuzamos rendszereket írjunk le, elemezzünk, és biztosítsuk azok helyességét. A kulcs az, hogy a folyamatok nem osztanak meg memóriát, hanem szinkron üzenetküldéssel kommunikálnak. Ezáltal elkerülhetők a versenyhelyzetek és holtpontok — ha jól tervezzük meg a rendszert. A modern nyelvek számos eleme (mint a Go csatornák) közvetlenül ebből az elméletből ered.