2010-03-27 30 views
5

जावा संदर्भ में थ्रेड और प्रक्रिया के बीच क्या अंतर है? जावा में इंटर-प्रोसेस संचार और अंतर-थ्रेड संचार कैसे प्राप्त किया जाता है? कृपया मुझे कुछ वास्तविक जीवन उदाहरणों पर इंगित करें।जावा इंटर प्रोसेस संचार और इंटर थ्रेड संचार?

उत्तर

15

मौलिक अंतर यह है कि धागे एक ही पते की जगहों पर रहते हैं, लेकिन विभिन्न पता रिक्त स्थानों में रहते हैं। इसका मतलब है कि इंटर-थ्रेड संचार ऑब्जेक्ट्स के संदर्भों को पार करने और साझा वस्तुओं को बदलने के बारे में है, लेकिन प्रक्रियाएं वस्तुओं की क्रमबद्ध प्रतियों को पार करने के बारे में है।

प्रैक्टिस में, जावा इंटरथ्रेड संचार को साझा ऑब्जेक्ट पर सादे जावा विधि कॉल के रूप में कार्यान्वित किया जा सकता है जिसमें उपयुक्त सिंक्रनाइज़ेशन फेंक दिया जाता है। वैकल्पिक रूप से, आप कुछ समरूप-किरकिरा (और त्रुटि प्रवण) सिंक्रनाइज़ेशन को छिपाने के लिए नई समवर्ती कक्षाओं का उपयोग कर सकते हैं मुद्दे।

इसके विपरीत, जावा इंटरप्रोसेस संचार बाइट्स के अनुक्रमों में राज्य, अनुरोध, आदि को मोड़ने के निम्नतम स्तर पर आधारित है जिसे संदेशों के रूप में भेजा जा सकता है या किसी अन्य जावा प्रक्रिया में स्ट्रीम के रूप में भेजा जा सकता है। आप यह काम स्वयं कर सकते हैं, या आप कार्यान्वयन के विवरण को दूर करने के लिए जटिलता के विभिन्न स्तरों की विभिन्न "मिडलवेयर" प्रौद्योगिकियों का उपयोग कर सकते हैं। जिन तकनीकों का उपयोग किया जा सकता है उनमें जावा ऑब्जेक्ट सीरियलाइजेशन, एक्सएमएल, जेएसओएन, आरएमआई, कॉरबा, एसओएपी/"वेब सर्विसेज", संदेश कतार, आदि शामिल हैं।

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

+0

धन्यवाद स्टीफन, मैं जवाब का जवाब प्राप्त कर सकता हूं। अगर आप इस अंतर को समझाने के लिए कुछ वास्तविक समय उदाहरण या कोड स्निपेट देते हैं तो बेहतर होगा। Plz – JavaUser

+3

@JavaUser - क्या आपका वास्तविक समय या वास्तविक जीवन है? किसी भी तरह से, इस सामान को सीखने का एक अच्छा तरीका सूर्य/ओरेकल की व्यापक ऑनलाइन ट्यूटोरियल जानकारी से है। –

2

मुझे एक प्रक्रिया के रूप में एक JVM के एक उदाहरण के बारे में सोचना पसंद है। इसलिए, इंटरप्रोसेस संचार जेवीएम के उदाहरणों के बीच होगा, उदाहरण के लिए, सॉकेट (संदेश पासिंग) के माध्यम से।

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

5

एक थ्रेड एक प्रक्रिया के अंदर मेमोरी तक पहुंच सकता है, यहां तक ​​कि स्मृति भी उसी प्रक्रिया के भीतर किसी अन्य थ्रेड द्वारा छेड़छाड़ की जा सकती है। चूंकि सभी धागे एक ही चल रही प्रक्रिया के लिए आंतरिक हैं, इसलिए वे अधिक तेज़ी से संवाद कर सकते हैं (क्योंकि उन्हें ऑपरेटिंग सिस्टम को रेफरी करने की आवश्यकता नहीं है)।

एक प्रक्रिया किसी अन्य प्रक्रिया के अंदर स्मृति का उपयोग नहीं कर सकते हैं, हालांकि आप जैसे विभिन्न साधनों के माध्यम से प्रक्रियाओं के बीच संवाद कर सकते हैं:

  1. नेटवर्क संकुल।
  2. फ़ाइलें
  3. पाइप्स
  4. साझा मेमोरी
  5. Semaphores
  6. कोरबा संदेशों
  7. RPC कॉल

महत्वपूर्ण बात यह है संचार प्रक्रिया करने के लिए प्रक्रिया के साथ याद करने के लिए है कि संचार प्रबंधित किया जाना चाहिए है ऑपरेटिंग सिस्टम के माध्यम से, और उन सभी चीजों की तरह जो एक मध्यम व्यक्ति की आवश्यकता होती है, जो ओवरहेड जोड़ती है।

डाउनसाइड पर, यदि कोई धागा गलत व्यवहार करता है, तो यह चल रही प्रक्रिया के भीतर ऐसा करता है, और बाधाएं अधिक होती हैं, यह सभी अच्छी तरह से व्यवहार करने वाले धागे को नीचे ले जा सकती है। यदि कोई प्रक्रिया गलत व्यवहार करती है, तो यह अन्य प्रक्रियाओं की स्मृति में सीधे लिख नहीं सकती है, और बाधाएं हैं कि केवल गलत व्यवहार प्रक्रिया मर जाएगी।

2

इंटर थ्रेड संचार = एक ही JVM अंदर धागे से बात कर एक दूसरे को

अंतर संचार प्रक्रिया (आईपीसी) = एक ही मशीन के अंदर धागे लेकिन एक दूसरे को

धागे के अंदर से बात कर विभिन्न JVMs में चल रहा वही जेवीएम एक दूसरे से नैनोसेकंद विलंबता के साथ बात करने के लिए लॉक-फ्री कतारों के माध्यम से पाइपलाइनिंग का उपयोग कर सकता है।

विभिन्न जेवीएम में थ्रेड्स एक-दूसरे से नैनोसेकंद विलंबता के साथ बात करने के लिए ऑफ़-हेप साझा मेमोरी (आमतौर पर उसी स्मृति-मैप किए गए फ़ाइल के माध्यम से अधिग्रहित) का उपयोग कर सकते हैं।

विभिन्न मशीनों में थ्रेड एक दूसरे से माइक्रोक्रॉन्ड विलंबता के साथ बात करने के लिए नेटवर्क का उपयोग कर सकते हैं।

लॉक-फ्री कतारों और आईपीसी के बारे में पूरी तरह से स्पष्टीकरण के लिए आप CoralQueue देख सकते हैं।

अस्वीकरण: मैं कोरलक्यूयू के डेवलपर्स में से एक हूं।

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