Channel (programim)

Në informatikë, një kanal është një model për komunikimin ndërprocesor dhe sinkronizimin përmes kalimit të mesazheve . Një mesazh mund të dërgohet përmes një kanali dhe një proces ose thread tjetër mund të marrë mesazhe të dërguara përmes një kanali të cilit i referohet, si një rrjedhë/rrymë. Implementime të ndryshme të kanaleve mund të jenë të stokuara ose jo, dhe sinkron ose asinkron.

 libthread channels 
Libraria për multithreading, libthread, e cila u krijua fillimisht për sistemin operativ Plan 9, ofron komunikim ndër-thread bazuar në kanale me madhësi të fiksuar.

 Shembuj 

 Go 
Kjo pjesë e kodit Go funksionon kështu: Fillimisht krijohet kanali c, më pas krijohet një gorutinë e cila dërgon 42 nëpër kanal. Kur numri futet në kanal, x vendoset në 42. Go lejon kanalet të ruajnë përmbajtjen në stok, si dhe të mos bllokojnë marrjen përmes përdorimit të një blloku select. c := make(chan int)

go func() {c <- 42}()

x := <- c

 Rust 
Rust siguron kanale asinkrone për komunikimin midis threadeve. Kanalet lejojnë një rrjedhje të njëanshme informacioni midis dy pikave fundor të quajtura përkatësisht: Sender dhe Receiver . use std::sync::mpsc;
use std::thread;

fn main() {
  let (tx, rx) = mpsc::channel();

  thread::spawn(move || {
    tx.send(123).unwrap();
  });

  let result = rx.recv();
  println!("{:?}", result);
}

 Zbatimet 
Përveç përdorimit të tyre themelor për komunikimin ndërprocesor, kanalet mund të përdoren si një primitivë për të zbatuar konstruksione të tjera të ndryshme programore të njëkohshme të cilat mund të realizohen si rryma/rrjedha. Për shembull, kanalet mund të përdoren për të ndërtuar të ardhme dhe premtime, ku një e ardhme është një kanal me një element dhe një premtim është një proces që dërgon në kanal, duke përmbushur të ardhmen.  Në mënyrë të ngjashme, iteratorët/shëtitësit mund të ndërtohen drejtpërdrejt nga kanalet.