चैनल (प्रोग्रामिंग)

From Vigyanwiki

कंप्यूटिंग में, एक चैनल इंटरप्रोसेस संचार और संदेश देना के माध्यम से तादात्म्य के लिए एक मॉडल है। एक संदेश एक चैनल पर भेजा जा सकता है, और एक अन्य प्रक्रिया या धागा एक चैनल पर भेजे गए संदेशों को प्राप्त करने में सक्षम होता है, जिसका एक संदर्भ (कंप्यूटर विज्ञान) एक स्ट्रीम (कंप्यूटिंग) के रूप में होता है। चैनलों के विभिन्न कार्यान्वयन बफ़र किए जा सकते हैं या नहीं, और या तो तुल्यकालिक या अतुल्यकालिक।

लिबट्रेड चैनल

मल्टीथ्रेडिंग (कंप्यूटर आर्किटेक्चर) लाइब्रेरी, लिबथ्रेड, जिसे पहली बार बेल लैब्स से ऑपरेटिंग सिस्टम प्लान 9 के लिए बनाया गया था, निश्चित आकार के चैनलों पर आधारित इंटर-थ्रेड संचार प्रदान करता है।

ओकैमल घटनाएं

ओकैमल इवेंट मॉड्यूल तुल्यकालन के लिए टाइप किए गए चैनल प्रदान करता है। जब मॉड्यूल के भेजने और प्राप्त करने के कार्यों को कहा जाता है, तो वे संबंधित भेजने और प्राप्त करने वाले घटनाएं बनाते हैं जिन्हें सिंक्रनाइज़ किया जा सकता है।

उदाहरण

लुआ लव2डी

लव (गेम इंजन) लाइब्रेरी जो लुआ (प्रोग्रामिंग भाषा) प्रोग्रामिंग लैंग्वेज का हिस्सा है, स्टैक के समान पुश और पॉप ऑपरेशंस वाले चैनलों को लागू करता है। पॉप ऑपरेशन तब तक ब्लॉक रहेगा जब तक स्टैक पर डेटा रेजिडेंट है। एक डिमांड ऑपरेशन पॉप के बराबर है, सिवाय इसके कि स्टैक पर डेटा होने तक यह ब्लॉक हो जाएगा

-- A string containing code which will be interpreted by a function such as loadstring(),
-- but on the C side to start a native thread.

local threadCode = [[
    love.thread.getChannel("test"):push("Hello world!")
]]


function love.load()
    -- Start the thread.
    
    thread = love.thread.newThread(threadCode)
    thread:start()
    
    -- The thread will block until "Hello world!" is popped off channel test's stack.
    -- Because the channel can be popped from before the thread first executes, there may not be data on the stack.
    -- in that case use :demand() instead of :pop() because :demand() will block until there is data on the stack and then return the data.
    
    print(love.thread.getChannel("test"):demand())
    
    -- The thread can now finish.
end


एक्सएमओएस एक्ससी

एक्सएमओएस प्रोग्रामिंग लैंग्वेज एक्ससी (प्रोग्रामिंग लैंग्वेज) एक चैनल से डेटा भेजने और प्राप्त करने के लिए एक आदिम टाइप चान और दो ऑपरेटर <: और :> प्रदान करती है।[1]

इस उदाहरण में, दो हार्डवेयर थ्रेड्स एक्सएमओएस पर आरंभ किए गए हैं, जो बराबर ब्लॉक में दो पंक्तियों को चला रहे हैं। पहली पंक्ति चैनल के माध्यम से संख्या 42 को प्रसारित करती है जबकि दूसरी प्राप्त होने तक प्रतीक्षा करती है और एक्स का मान सेट करती है। एक्ससी भाषा चुनिंदा कथन के माध्यम से चैनलों पर अतुल्यकालिक प्राप्त करने की अनुमति भी देती है।

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


जाओ

गो कोड का यह स्निपेट एक्ससी कोड के समान ही प्रदर्शन करता है। सबसे पहले चैनल सी बनाया जाता है, फिर एक गोरोइन उत्पन्न होता है जो चैनल के माध्यम से 42 भेजता है। जब चैनल एक्स में संख्या डाल दी जाती है तो 42 पर सेट हो जाता है। गो चैनलों को सामग्री को बफर करने की अनुमति देता है, साथ ही एक चुनिंदा ब्लॉक के उपयोग के माध्यम से गैर अवरुद्ध प्राप्त करने की अनुमति देता है।[2]

c := make(chan int)

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

x := <- c


जंग

जंग (प्रोग्रामिंग भाषा) थ्रेड्स के बीच संचार के लिए अतुल्यकालिक चैनल प्रदान करता है। चैनल दो अंतिम बिंदुओं के बीच सूचना के एक दिशात्मक प्रवाह की अनुमति देते हैं: द प्रेषक और यह प्राप्तकर्ता .[3]

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);
}


अनुप्रयोग

इंटरप्रोसेस संचार के लिए उनके मौलिक उपयोग के अलावा, चैनलों को अन्य समवर्ती प्रोग्रामिंग निर्माणों को लागू करने के लिए आदिम के रूप में उपयोग किया जा सकता है जिन्हें धाराओं के रूप में महसूस किया जा सकता है। उदाहरण के लिए, चैनल का उपयोग वचन और प्रतिज्ञाओं के निर्माण के लिए किया जा सकता है, जहां भविष्य एक-तत्व चैनल है, और वादा एक प्रक्रिया है जो चैनल को भेजता है, भविष्य को पूरा करता है।[4] इसी तरह, इटरेटर सीधे चैनलों से बनाए जा सकते हैं।[5]


कार्यान्वयन की सूची

  • गैर-मानक, पुस्तकालय आधारित चैनलों के कार्यान्वयन की सूची
  • स्काला के लिए:
    • सीएसओ - स्काला वस्तुओं का संचार[6] चैनल-आधारित संचार और संगामिति के लिए एक पूर्ण डीएसएल है जिसका शब्दार्थ आदिम OCCAM आदिम का सामान्यीकरण है। समवर्ती प्रोग्रामिंग के शिक्षण में 2007 से सीएसओ का उपयोग किया गया है, और प्रासंगिक व्याख्यान थ्रेडसीएसओ कार्यान्वयन के साथ मिल सकते हैं।[7] * सी ++ के लिए:
    • छुरा[8] यह कार्यान्वयन विभाजन, और विभिन्न मर्ज और ज़िप संचालन का समर्थन करता है। अलग-अलग निष्पादकों को अलग-अलग नोड्स से जोड़ा जा सकता है।

संदर्भ

  1. "XMOS Programming Guide | XMOS". Archived from the original on 2016-03-04. Retrieved 2015-05-10.
  2. "Effective Go - the Go Programming Language".
  3. "चैनल - उदाहरण के द्वारा जंग". doc.rust-lang.org. Retrieved 28 November 2020.
  4. "Futures", Go Language Patterns
  5. "Iterators", Go Language Patterns
  6. Sufrin, Bernard (2021-07-13), ThreadCSO (PDF), retrieved 2023-02-17
  7. Sufrin, Bernard (2021-07-13), ThreadCSO, retrieved 2023-02-17
  8. "स्टैब एडोब की सॉफ्टवेयर टेक्नोलॉजी लैब का चल रहा काम है। एडोब सोर्स लाइब्रेरीज़ (एएसएल), प्लेटफ़ॉर्म लाइब्रेरीज़ और नए स्टैब लाइब्रेरीज़ को जीथब पर होस्ट किया गया है।". 2021-01-31.


बाहरी संबंध