2008-10-26 7 views
5

मैं पहली जगह हास्केल का उपयोग करके एक बाल प्रक्रिया को फोर्क करने के बारे में कैसे जाउंगा?हास्केल में माता-पिता और फोर्कड बाल प्रक्रिया के बीच डेटा साझा कैसे किया जाएगा?

इसके अलावा, यदि पाइप डेटा साझा करने के प्रश्न के लिए एक स्पष्ट समाधान हैं - क्या पाइप का उपयोग करने के अलावा इसे करने का कोई और तरीका है? मैं सी (शमेट, * शमत, shmdt और shmctl कार्यों) में साझा स्मृति खंडों के उपयोग से परिचित हूँ। क्या हास्केल इसका अनुकरण कर सकता है? यदि हां, तो कैसे?

मैं आपकी सहायता के लिए बहुत आभारी हूं।

मुझे स्वीकार करना होगा कि मैं कार्यात्मक प्रोग्रामिंग भाषाओं के लिए बहुत नया हूं, और जब भी हास्केल की बात आती है। तो मुझे माफ़ कर दो (और कृपया मुझे सही करें) अगर मैंने कुछ मूर्खतापूर्ण कहा।

+1

यहाँ दोनों उत्तर "एक उपयोगकर्ता भूमि धागा forking" के रूप में "एक बच्चे की प्रक्रिया forking" पार्स करने लगते हैं। लेकिन सवाल में अन्य संदर्भ दिए गए यह सही नहीं लगता है। –

उत्तर

2

बेहतर अभी तक, सॉफ्टवेयर ट्रांज़ेक्शनल मेमोरी - यानी, टीवीर्स और टीचनल का उपयोग करें।

एक ही पुस्तक की सिफारिश करेंगे, अलग अध्याय: http://sequence.complete.org/node/257

0

आप वास्तव में एक प्रक्रिया, यूनिक्स शैली कांटा करने के लिए चाहते हैं, आप की जरूरत है: http://book.realworldhaskell.org/read/software-transactional-memory.html

यहाँ कार्रवाई में इस तकनीक का एक अच्छा छोटा सा उदाहरण है http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

इस मामले में, एमवीआरएस और टीवीर्स इंटरप्रोसेस संचार नहीं करते हैं, इसलिए आप उन्हें आईपीसी करने के लिए उपयोग नहीं कर सकते हैं। आईपीसी (पाइप, सॉकेट, आदि) के लिए सभी मानक तकनीक अभी भी काम करती है। यदि आप कुछ और उच्च स्तर चाहते हैं, तो क्लाउड हास्केल http://www.haskell.org/haskellwiki/Cloud_Haskell

1

ओपी ने एक उपप्रजाति के साथ संवाद करने के बारे में पूछा, धागा नहीं। इसके लिए, पाइप इसे करने का एक बिल्कुल सही तरीका है। यदि आप चाहें तो आप सी लाइब्रेरी फ़ंक्शन को हास्केल से सीधे कॉल भी कर सकते हैं, हालांकि यह मुश्किल हो सकता है।

यह सवाल यहाँ पर एक बेहतर जवाब है: Is there some standard Haskell library dealing with process communication?

संबंधित मुद्दे