Csatorna (programozás)

A csatorna a folyamatok közötti kommunikáció és szinkronizálás  modellje az üzenettovábbításon keresztül a programozásban. Üzenetek küldhetők egy csatornán keresztül, és egy másik folyamat vagy szál, amely a csatornára hivatkozik , fogadhatja a csatornán keresztül küldött üzenetfolyamot adatfolyamként . A csatornák különböző megvalósításai lehetnek szinkronok vagy aszinkronok, használhatnak üzenetpufferelést vagy sem.

A csatornák alapvetőek a folyamatszámítási megközelítésben, és a Cooperating Sequential Processes (CSP), a párhuzamosság formális modelljéből származnak . A csatornákat számos származtatott programozási nyelvben használják, mint például az Occam , Limbo (a Newsqueak és Aleph nyelveken keresztül ). A C programozási nyelv libthread szálfűzési könyvtárában is használatosak a Plan 9 operációs rendszerben , valamint a Stackless Pythonban és a Go nyelvben .

Csatorna implementációk

A CSP-modellhez hasonlóan létrehozott csatornák szinkronok : egy folyamat, amely egy objektum fogadására vár egy csatornától, az objektum elküldéséig blokkol. Az ilyen megvalósításokat "rendezvous"-nak nevezik. Az ilyen csövekkel végzett tipikus műveleteket a libthread csatorna interfészek segítségével mutatjuk be példaként:

libthread csatornák

Az eredetileg a Plan 9 operációs rendszerhez létrehozott libthread szálfűzési könyvtár szálak közötti kommunikációt kínál rögzített méretű csöveken keresztül.

OCaml események

Az OCaml eseménymodul típusos csatornákat valósít meg a szinkronizáláshoz. A modul küldési és fogadási funkcióinak meghívásakor a megfelelő eseményeket generálják, amelyek szinkronizálhatók.

Példák

XMOS XC

Az XMOS -ban az XC nyelv egy beépített "chan" típust és két "<:" és ":>" operátort biztosít az adatok küldéséhez és fogadásához egy csatornáról. [egy]

A példa két hardverszálat indít az XMOS-ban, és két sort hajt végre a "par" blokkból. Az első sor a 42-es számot küldi a csövön keresztül. A második sor vár egy értéket a csatornától, és a kapott értéket az x változóba írja. Az XC nyelv támogatja az aszinkron vételt is a csatornákról a select utasítás használatával.

chan c ; int x ; par { c <: 42 ; c :> x ; }

A Go nyelv

Ez a Go kódrészlet először létrehozza a c csatornát, majd létrehoz egy gorutint, amely 42-t küld a csatornán keresztül. Ha számot küld egy csatornának, az x értéke 42 lesz. A Go lehetővé teszi a csatornák számára, hogy puffereljenek tartalmat. Egy csatorna nem blokkoló vételi művelete lehetséges kiválasztási blokk segítségével. [2]

c := make ( chan int ) go func () { c <- 42 }() x := <- c

Alkalmazások

A szálak közötti kommunikáción túlmenően a csatornák primitívként is használhatók más párhuzamos konstrukciók megvalósítására. Például a csatornák lehetővé teszik a határidők és ígéretek megvalósítását , ahol a jövő egy egyedi csatorna, az ígéret pedig egy folyamat, amely a csatornához küldi a jövőt. [3] Hasonlóképpen, az iterátorok csöveken keresztül is megvalósíthatók. [négy]

Jegyzetek

  1. XMOS programozási útmutató (nem elérhető hivatkozás) . Letöltve: 2016. augusztus 4. Az eredetiből archiválva : 2016. március 4.. 
  2. Hatékony Go - The Go programozási nyelv . Letöltve: 2016. augusztus 4. Az eredetiből archiválva : 2015. január 6..
  3. " Futures archiválva 2020. december 4-én a Wayback Machine -nél ", a Go nyelvi minták archiválva 2020. november 11-én a Wayback Machine -nél
  4. " Iterátorok archiválva 2020. október 15-én a Wayback Machine -nél ", Go nyelvi minták archiválva 2020. november 11-én a Wayback Machine -nél

Linkek