2015-10-29 8 views
9

कहानी:
कुछ दिन पहले मैं फ़ाइल एक्सचेंज के आधार पर अंतर-प्रक्रिया संचार के बारे में सोच रहा था। कहें प्रक्रिया ए अपने काम के दौरान कई फाइलें बनाता है और प्रक्रिया बी बाद में इन फ़ाइलों को पढ़ता है। यह सुनिश्चित करने के लिए कि सभी फाइलें सही तरीके से लिखी गई हैं, एक विशेष फ़ाइल बनाना सुविधाजनक होगा, जो अस्तित्व सिग्नल करेगा कि सभी परिचालन किए गए थे।इंटर-प्रोसेस फ़ाइल एक्सचेंज: दक्षता और दौड़ की स्थिति

सरल कार्यप्रवाह:
प्रक्रिया एक फ़ाइल "file1.txt"
प्रक्रिया एक फ़ाइल "file2.txt"
प्रक्रिया एक बनाता है फ़ाइल "processA.ready"

प्रक्रिया बी फ़ाइल जब तक इंतज़ार कर रहा है बनाता है बनाता है "processA.ready" प्रकट होता है और फिर फ़ाइल 1 और फ़ाइल 2 पढ़ता है।

संदेह:
फ़ाइल संचालन विशेष रूप से फ़ाइल सबसिस्टम द्वारा, ऑपरेटिंग सिस्टम द्वारा किया जाता है। चूंकि कार्यान्वयन यूनिक्स, विंडोज या मैकोज़ में भिन्न हो सकते हैं, इसलिए मैं फ़ाइल एक्सचेंज इंटर-प्रोसेस संचार की विश्वसनीयता के बारे में अनिश्चित हूं। यहां तक ​​कि यदि ओएस इस स्थिरता की गारंटी देगा, तो जावा में जेआईटी कंपाइलर जैसी चीजें हैं, जो प्रोग्राम निर्देशों को पुन: व्यवस्थित कर सकती हैं।

प्रश्न:
1. क्या ऑपरेटिंग सिस्टम में फ़ाइल संचालन पर कोई वास्तविक विनिर्देश हैं?
2. क्या जेआईटी को वास्तव में एक प्रोग्राम थ्रेड के लिए फ़ाइल ऑपरेशन प्रोग्राम निर्देशों को पुन: व्यवस्थित करने की अनुमति है?
3. क्या आजकल इंटरचेंज संचार के लिए फ़ाइल एक्सचेंज एक प्रासंगिक विकल्प है या टीसीपी/HTTP/आदि चुनने के लिए यह बिना शर्त है?

+0

बड़ी समस्या आप होगा डिस्क संचालन की कैशिंग है। – user3344003

+1

यदि मैं आप थे, तो मैं HTTP लागू करूंगा। प्रक्रियाओं को सिंक्रनाइज़ करने और किसी प्रकार के ईवेंट श्रोताओं को लिखने की आवश्यकता नहीं है। और इन प्रक्रियाओं को भविष्य में अलग-अलग मशीनों में अलग करना आसान होगा। – gkiko

+0

@gkiko वास्तव में मैंने पहले ही यह कर लिया है :) – AdamSkywalker

उत्तर

2
  1. जब आप अपनी .ready फ़ाइल प्रकट होते हैं तो आप सिग्नल प्राप्त करने के लिए जावा में फ़ाइल वॉचर (वॉच सर्विस) का उपयोग कर सकते हैं।

  2. पुनःअनुक्रमण लागू हो सकते हैं, लेकिन यह इस मामले में अपने आवेदन तर्क चोट नहीं चाहिए - नीचे दिए गए लिंक देखें: https://assylias.wordpress.com/2013/02/01/java-memory-model-and-reordering/

  3. मैं अपने डेटा के आकार का पता नहीं है, लेकिन मैं यह अभी भी होगा महसूस हो रहा है इस मामले में एक संदेश कतार (एमक्यू) समाधान का उपयोग करने के लिए बेहतर है। फ़ाइल IO का उपयोग करना अपेक्षाकृत धीमी गति से ऑपरेशन है जो सिस्टम को धीमा कर सकता है।

1

मेरी परियोजनाओं में से एक पर प्रयुक्त फ़ाइल एक्सचेंज आधारित दृष्टिकोण। यह एक प्रक्रिया पूरी होने पर फ़ाइल एक्सटेंशन का नाम बदलने पर आधारित है, इसलिए अन्य प्रक्रिया फ़ाइल नाम अभिव्यक्ति जांच द्वारा इसे पुनर्प्राप्त कर सकती है।

  1. एफ़टीपी प्रक्रिया एक फ़ाइल डाउनलोड करता है और उसका नाम रखा '.downloaded'
  2. मुख्य कार्य प्रोसेसर फ़ाइलें '* .downloaded' के लिए निर्देशिका की खोज।
    प्रारंभ करने से पहले, नौकरी अपडेट फ़ाइल नाम '.processing' के रूप में।
    समाप्त होने पर '.done' के अपडेट।
    त्रुटि के मामले में, यह '.error' एक्सटेंशन के साथ एक नई पूरक फ़ाइल बनाता है और वहां अंतिम संसाधित लाइन और अपवाद ट्रेस लगाता है। रीट्रीज़ पर, यदि यह फ़ाइल मौजूद है तो इसे पढ़ें और सही स्थिति से फिर से शुरू करें।
  3. लोकेटर प्रक्रिया की खोज '।किया गया 'और इसकी कॉन्फ़िगरेशन के अनुसार बैकअप फ़ोल्डर में स्थानांतरित करें या

यह दृष्टिकोण मोबाइल ऑपरेटर नेटवर्क में भारी लोड के साथ ठीक काम कर रहा है।

विचारों के लिए अद्वितीय नामों का उपयोग कर पर विचार बिंदु महत्वपूर्ण है। चूंकि ऑपरेटिंग सिस्टम के अनुसार फ़ाइल का व्यवहार बदलना बदलता है।
उदा। गंतव्य पर एक ही फ़ाइल होने पर विंडोज त्रुटि देता है, हालांकि यूनिक्स इसे लिखता है।

3
  1. आपको इस मामले में ओएस विवरण जानने की आवश्यकता नहीं है। जावा आईओ एपीआई को यह अनुमान लगाने के लिए दस्तावेज किया गया है कि फाइल सहेजी गई थी या नहीं।
  2. जेवीएम देशी कॉल को पुन: व्यवस्थित नहीं कर सकता है। यह स्पष्ट रूप से जेएमएम में लिखा नहीं गया है लेकिन यह निहित है कि यह ऐसा नहीं कर सकता है। जेवीएम अनुमान लगा सकता है कि देशी कॉल का असर क्या है और उन कॉलों की पुनरावृत्ति काफी उदार हो सकती है।
  3. संचार का एक तरीका के रूप में फ़ाइलों का उपयोग कर के कुछ नुकसान कर रहे हैं:
    1. यह आईओ जो धीमी है का उपयोग करता है
    2. यह मामले में विभिन्न मशीनों के बीच अलग-अलग प्रक्रियाओं आप इसे की आवश्यकता होगी के लिए मुश्किल है (वहाँ का उपयोग कर तरीके हैं उदाहरण के लिए साम्बा लेकिन काफी मंच पर निर्भर)
संबंधित मुद्दे