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
[Redakto | Redakto nëpërmjet kodit]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
[Redakto | Redakto nëpërmjet kodit]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. [1]
c := make(chan int)
go func() {c <- 42}()
x := <- c
Rust
[Redakto | Redakto nëpërmjet kodit]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
. [2]
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
[Redakto | Redakto nëpërmjet kodit]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.
- ^ "Effective Go - the Go Programming Language".
{{cite web}}
: Mungon ose është bosh parametri|language=
(Ndihmë!) - ^ "Channels - Rust By Example". doc.rust-lang.org. Marrë më 28 nëntor 2020.
{{cite web}}
: Mungon ose është bosh parametri|language=
(Ndihmë!)Mirëmbajtja CS1: Datë e përkthyer automatikisht (lidhja)