Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

मैसेज क्यू का उपयोग करके IPC

जब हमारे पास पहले से शेयर्ड मेमोरी है तो हमें मैसेज क्यू की आवश्यकता क्यों है? यह कई कारणों से होगा, आइए इसे सरलीकरण के लिए कई बिंदुओं में तोड़ने की कोशिश करते हैं -

  • जैसा कि समझा गया, एक बार मैसेज किसी प्रोसेस द्वारा प्राप्त हो जाने पर यह किसी अन्य प्रोसेस के लिए उपलब्ध नहीं होगा। जबकि शेयर्ड मेमोरी में, डेटा कई प्रोसेसेज द्वारा एक्सेस के लिए उपलब्ध होता है।

  • यदि हम छोटे मैसेज फॉर्मेट के साथ संवाद करना चाहते हैं।

  • शेयर्ड मेमोरी डेटा को सिंक्रोनाइज़ेशन के साथ संरक्षित करने की आवश्यकता होती है जब कई प्रोसेस एक ही समय पर संवाद कर रहे हों।

  • शेयर्ड मेमोरी का उपयोग करके लिखने और पढ़ने की आवृत्ति अधिक है, तो कार्यक्षमता को लागू करना बहुत जटिल होगा। इस तरह के मामलों में उपयोग के संबंध में उचित नहीं।

  • क्या होगा यदि सभी प्रोसेस को शेयर्ड मेमोरी एक्सेस करने की आवश्यकता नहीं है लेकिन बहुत कम प्रोसेस को ही इसकी आवश्यकता है, तो मैसेज क्यू के साथ लागू करना बेहतर होगा।

  • यदि हम अलग-अलग डेटा पैकेट्स के साथ संवाद करना चाहते हैं, मान लीजिए प्रोसेस A प्रोसेस B को मैसेज टाइप 1 भेज रहा है, मैसेज टाइप 10 प्रोसेस C को, और मैसेज टाइप 20 प्रोसेस D को। इस मामले में, मैसेज क्यू के साथ लागू करना सरल है। दिए गए मैसेज टाइप को 1, 10, 20 के रूप में सरल बनाने के लिए, यह 0 या +ve या -ve हो सकता है जैसा कि नीचे चर्चा की गई है।

  • बेशक, मैसेज क्यू का क्रम FIFO (फर्स्ट इन फर्स्ट आउट) है। क्यू में डाला गया पहला मैसेज पहला है जिसे पुनर्प्राप्त किया जाता है।

शेयर्ड मेमोरी या मैसेज क्यू का उपयोग एप्लिकेशन की आवश्यकता पर निर्भर करता है और इसे कितनी प्रभावी ढंग से उपयोग किया जा सकता है।

मैसेज क्यू का उपयोग करके संचार निम्नलिखित तरीकों से हो सकता है -

  • एक प्रोसेस द्वारा शेयर्ड मेमोरी में लिखना और दूसरे प्रोसेस द्वारा शेयर्ड मेमोरी से पढ़ना। जैसा कि हम जानते हैं, पढ़ना कई प्रोसेस द्वारा भी किया जा सकता है।
    मैसेज क्यू का उपयोग करके IPC

एक प्रोसेस द्वारा अलग-अलग डेटा पैकेट्स के साथ शेयर्ड मेमोरी में लिखना और कई प्रोसेस द्वारा पढ़ना, यानी मैसेज टाइप के अनुसार।

मैसेज क्यू का उपयोग करके IPC

मैसेज क्यू पर कुछ जानकारी देखने के बाद, अब सिस्टम कॉल (सिस्टम V) की जांच करने का समय है जो मैसेज क्यू का समर्थन करता है।

मैसेज क्यू का उपयोग करके संचार करने के लिए, निम्नलिखित चरण हैं -

चरण 1 - मैसेज क्यू बनाएं या पहले से मौजूद मैसेज क्यू से कनेक्ट करें (msgget())

चरण 2 - मैसेज क्यू में लिखें (msgsnd())

चरण 3 - मैसेज क्यू से पढ़ें (msgrcv())

चरण 4 - मैसेज क्यू पर कंट्रोल ऑपरेशन करें (msgctl())

यहां हम दो प्रोसेस बनाएंगे। एक लिख सकता है और दूसरा पढ़ सकता है। आइए देखते हैं कि रीडर और राइटर प्रोसेस शेयर्ड मेमोरी का उपयोग करके कैसे काम कर रहे हैं।

उदाहरण कोड (राइटर)

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>

// मैसेज क्यू के लिए स्ट्रक्चर
struct msg_buffer {
    long msg_type;
    char msg[100];
} message;

int main() {
    key_t my_key;
    int msg_id;
    my_key = ftok("progfile", 65); // यूनिक की बनाएं
    msg_id = msgget(my_key, 0666 | IPC_CREAT); // मैसेज क्यू बनाएं और आईडी लौटाएं
    message.msg_type = 1;
    printf("Write Message: ");
    fgets(message.msg, 100, stdin);
    msgsnd(msg_id, &message, sizeof(message), 0); // मैसेज भेजें
    printf("Sent message is: %s \n", message.msg);
    return 0;
}

उदाहरण कोड (रीडर)

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>

// मैसेज क्यू स्ट्रक्चर परिभाषित करें
struct msg_buffer {
    long msg_type;
    char msg[100];
} message;

int main() {
    key_t my_key;
    int msg_id;
    my_key = ftok("progfile", 65); // यूनिक की बनाएं
    msg_id = msgget(my_key, 0666 | IPC_CREAT); // मैसेज क्यू बनाएं और आईडी लौटाएं
    msgrcv(msg_id, &message, sizeof(message), 1, 0); // मैसेज प्राप्त करने के लिए उपयोग किया जाता है
    // मैसेज प्रदर्शित करें
    printf("Received Message is: %s \n", message.msg);
    msgctl(msg_id, IPC_RMID, NULL); // मैसेज क्यू नष्ट करें
    return 0;
}

आउटपुट

मैसेज क्यू का उपयोग करके IPC

  1. C++ में क्यू का उपयोग करके BST में एक पथ को उल्टा करना C++ में क्यू का उपयोग करके BST में एक पथ को उल्टा करना

    एक बाइनरी सर्च ट्री दिया गया है, और हमें एक विशेष कुंजी से इसके पथ को उल्टा करना आवश्यक है, उदाहरण के लिए। समाधान खोजने का दृष्टिकोण इस दृष्टिकोण में, हम एक क्यू बनाएंगे और रूट मिलने तक सभी नोड्स को पुश करेंगे। उदाहरण left); cout key key = q1.front(); // हम वर्तमान के साथ पहली क्यू तत्व

  1. C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार

    हमें डेटा और प्राथमिकता एक पूर्णांक मान के रूप में दी गई है और कार्य दिए गए प्राथमिकता के अनुसार डबल लिंक्ड लिस्ट बनाना और परिणाम प्रदर्शित करना है।कतार एक FIFO डेटा संरचना है जिसमें पहले डाला गया तत्व सबसे पहले हटाया जाता है। प्राथमिकता कतार एक प्रकार की कतार है जिसमें तत्वों को प्राथमिकता के आधार

  1. Truecaller का उपयोग करके संदेशों को शेड्यूल कैसे करें Truecaller का उपयोग करके संदेशों को शेड्यूल कैसे करें

    क्या आपको कभी किसी का जन्मदिन भूलने के पछतावे से निपटना पड़ा है? वास्तविकता यह है कि आप आखिरकार इंसान हैं, और कभी-कभी आप महत्वपूर्ण तारीखें भूल जाते हैं, यहां तक कि अपने प्रियजनों की भी। सौभाग्य से, आपको किसी विशेष अवसर को भूलने की आवश्यकता नहीं है क्योंकि Truecaller आपको समय से पहले संदेश भेजने की