كيف يمكن للمرء تبادل البيانات بين الأم والطفل عملية متشعب في حزقيل؟
-
04-07-2019 - |
سؤال
وكيف لي أن أذهب حتى حول التفرع عملية تابعة باستخدام هاسكل في المقام الأول؟
وأيضا، إذا الأنابيب هي الحل الواضح لتبادل البيانات السؤال - هل هناك أي طريقة أخرى للقيام بذلك إلى جانب استخدام الأنابيب؟ أنا على دراية استخدام شرائح الذاكرة المشتركة في C (لshmget، * shmat، shmdt وshmctl وظائف). يمكن هاسكل تكون قادرة على تقليد هذا؟ إذا كان الأمر كذلك، كيف؟
وسأكون ممتنا جدا لأية مساعدة هل يمكن تجنيب.
ويجب أن أعترف أنا كثيرا الجديد لغات البرمجة الوظيفية، وحتى أكثر من ذلك عندما يتعلق الأمر هاسكل. فاغفر لي (ويرجى تصحيح لي) إذا قلت شيئا سخيفا.
المحلول
والأفضل من ذلك، استخدام البرمجيات معاملات الذاكرة - وهذا هو، TVars وTChannels.
وسوف يوصي الكتاب نفسه، الفصل مختلف: HTTP: // الكتاب. realworldhaskell.org/read/software-transactional-memory.html
وهنا مثال صغير جيدا على هذا الأسلوب في العمل: http://sequence.complete.org / عقدة / 257
نصائح أخرى
ووOP سئل عن التواصل مع فرعي أو جانبي، وليس الموضوع. لذلك، الأنابيب هي طريقة ما يرام تماما للقيام بذلك. يمكنك أيضا استدعاء الدالة مكتبة C مباشرة من هاسكل إذا كنت تريد، على الرغم من أن يمكن أن تحصل صعبة.
وهذا السؤال له إجابة أفضل هنا: هناك بعض المكتبات هاسكل القياسية التعامل مع عملية الاتصال؟
وMVars استخدام أو القنوات. انظر الفصل 24 من RealWorld هاسكل: http://book.realworldhaskell.org/read/concurrent-and- متعددة النوى-programming.html
إذا كنت ترغب في مفترق الواقع عملية، على غرار يونكس، تحتاج إلى استخدام forkProcess
كما قدمها <لأ href = "http://hackage.haskell.org/package/unix-2.4.2.0/docs/System- POSIX-Process.html "يختلط =" نوفولو "> http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html
في هذه الحالة، MVars وTVars لا تفعل اتصال interprocess، بحيث لا يمكن استخدامها للقيام IPC. جميع التقنيات القياسية لIPC (الأنابيب، ومآخذ، إلخ) لا تزال تعمل. إذا كنت تريد شيئا أكثر على مستوى عال، وتحقق من الغيمة هاسكل http://www.haskell.org/haskellwiki/ Cloud_Haskell