में तेज उत्पादक/धीमी उपभोक्ता मैंने सी में एक प्रोग्राम लिखा जो एक घटना की प्रतीक्षा करता है, और फिर system()
फ़ंक्शन द्वारा बाहरी सिस्टम कमांड चलाता है।सी
while(true){
wait_for_event();
system("cmd");
}
मैं इस पर एक seriuos समस्या है, cmd
एक भारी आदेश है और कई सेकंड लेता है पूरा हो जाने की, मेरे ऐप इस समय सीमा में कुछ घटनाओं याद करते हैं।
तो मैं system
समारोह है, जो बहुत भारी है, एक अन्य कार्यक्रम के लिए जाने का फैसला किया, तो मैं अपने कार्यक्रम बदल इस प्रकार है:
while(true){
wait_for_event();
write_to_fifo("cmd");
}
और अन्य प्रोग्राम लिखा है:
while(true){
system(read_from_pipe());
}
लेकिन यह मदद नहीं करता है, क्योंकि यदि निर्माता (पहला कार्यक्रम) उपभोक्ता (द्वितीय कार्यक्रम) से तेज़ी से लिखता है, तो उपभोक्ता कुछ डेटा याद करता है!
क्या इस समस्या को संभालने का कोई तरीका है?
घटनाओं को कैप्चर करने के लिए एक थ्रेड का उपयोग करें, उन्हें एक कतार में जोड़ें, और अपने उपभोक्ता उस कतार से खींचें। – Falmarri
क्या उत्पादक सिंगल थ्रेडेड छोड़कर उपभोक्ता पर बोझ को कम करने के लिए कई धागे का उपयोग करना संभव है? यह माना जाता है कि यह एक हारने वाली लड़ाई है, लेकिन यह आपकी आवश्यकताओं को बचाने के लिए पर्याप्त हो सकती है। यदि आप अभी भी अतिरिक्त धागे के लिए बहुत अधिक हो जाते हैं तो आपको डेटा स्टोर भी देखना चाहिए। – pickypg
आप अपनी पाइप कैसे सेट अप करते हैं?बेशक, अगर आप लगातार प्रक्रिया कर सकते हैं तो आप अधिक डेटा प्राप्त कर सकते हैं, कुछ "देने" जा रहा है। लेकिन बड़ी मात्रा में डेटा को धीरे-धीरे संसाधित करने के लिए पाइप का उपयोग करना पूरी तरह से संभव है। अन्यथा, यह 'cat myprog.c | gcc -o myprog' करने के लिए काम नहीं करेगा - और यह करता है - जीसीसी कई बार धीमा है, बिल्ली पाइप के जितनी तेजी से धक्का देगी। –