जावा मेमोरी मॉडल (जेएमएम) जावा में समवर्ती प्रोग्रामिंग का एक मौलिक लेकिन अक्सर गलत समझा जाने वाला पहलू है। जावा 5 के साथ पेश किया गया, जेएमएम परिभाषित करता है कि थ्रेड मेमोरी के साथ कैसे इंटरैक्ट करते हैं, मल्टी-थ्रेडेड प्रोग्राम में स्थिरता और पूर्वानुमान सुनिश्चित करते हैं। इस लेख में, हम जेएमएम की गहराई में उतरेंगे, इसकी प्रमुख अवधारणाओं का पता लगाएंगे, और जांच करेंगे कि यह समवर्ती जावा एप्लिकेशन विकास को कैसे प्रभावित करता है।
1. दृश्यता
दृश्यता संबंधी चिंताएं यह सुनिश्चित करती हैं कि एक थ्रेड द्वारा किया गया परिवर्तन अन्य थ्रेड पर दिखाई दे। उचित तंत्र के बिना, कंपाइलर या सीपीयू अनुकूलन के कारण एक थ्रेड अन्य थ्रेड से अपने परिवर्तनों को अनिश्चित काल तक छिपा सकता है।
2. शेड्यूलिंग
शेड्यूलिंग उस क्रम को संदर्भित करता है जिसमें निर्देश निष्पादित किए जाते हैं। जेएमएम प्रदर्शन कारणों से कुछ पुनर्क्रमण की अनुमति देता है, लेकिन कार्यक्रम के शब्दार्थ को बनाए रखने के लिए कुछ आदेशों की गारंटी भी देता है।
3. परमाणुता
एटोमिसिटी गारंटी देती है कि एक ऑपरेशन अन्य थ्रेड्स के संभावित हस्तक्षेप के बिना, एक ही अविभाज्य चरण में किया जाता है।
1. रिश्ते से पहले होता है
यह झामुमो का आधार है। यदि कोई क्रिया A, क्रिया B से "पहले होती है", तो A के प्रभाव B को दिखाई देने की गारंटी है। यह संबंध परिवर्तनशील है और जावा में सिंक्रनाइज़ेशन का आधार बनता है।
2. परिवर्तनशील
volatile कीवर्ड सुनिश्चित करता है कि थ्रेड के बीच परिवर्तन दिखाई दे रहे हैं। एक अस्थिर चर को पढ़ने पर हमेशा उस चर पर किया गया अंतिम लेखन दिखाई देगा।
3. सिंक्रनाइज़
सिंक्रनाइज़्ड ब्लॉक और विधियां समान मॉनिटर प्राप्त करने और जारी करने वाले थ्रेड्स के बीच घटित-पहले संबंध स्थापित करती हैं।
4. अंतिम
उचित रूप से प्रारंभ किए गए अंतिम फ़ील्ड को अतिरिक्त सिंक्रनाइज़ेशन के बिना सभी थ्रेड्स पर दिखाई देने की गारंटी है।
1. दोबारा जांच की गई लॉकिंग
दृश्यता समस्याओं के कारण जावा 5 से पहले दोबारा जांचा गया लॉकिंग पैटर्न टूट गया था। जेएमएम ने इस समस्या को ठीक कर दिया, जिससे volatile के साथ इसके सही उपयोग की अनुमति मिल गई।
class Singleton { private static volatile Singleton instance; public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
2. प्रकाशन वस्तुएं
आंशिक दृश्यता समस्याओं से बचने के लिए सुरक्षित ऑब्जेक्ट प्रकाशन महत्वपूर्ण है। जेएमएम गारंटी देता है कि यदि कोई ऑब्जेक्ट सही ढंग से प्रकाशित किया गया है (उदाहरण के लिए, एक अस्थिर फ़ील्ड या थ्रेड-सुरक्षित वर्ग के माध्यम से), तो उसके सभी फ़ील्ड दिखाई देंगे।
3. निर्देशों का पुनर्गठन
जेएमएम कुछ पुनर्गठन की अनुमति देता है जो डेवलपर्स को आश्चर्यचकित कर सकता है।
उदाहरण के लिए:
int a, b; a = 1; b = 2;
को पुनर्व्यवस्थित किया जा सकता है:
int a, b; b = 2; a = 1;
जब तक ये निर्देश उचित समय संबंधी बाधाओं से घिरे न हों।
जावा मेमोरी मॉडल जावा में समवर्ती प्रोग्रामिंग का एक महत्वपूर्ण पहलू है। यद्यपि जटिल, सही और कुशल समवर्ती कोड लिखने के लिए इसे समझना आवश्यक है। दृश्यता, शेड्यूलिंग और परमाणुता की अवधारणाओं के साथ-साथ घटित-पहले, अस्थिर और सिंक्रनाइज़ जैसे तंत्रों में महारत हासिल करके, डेवलपर्स मजबूत और कुशल मल्टी-थ्रेडेड एप्लिकेशन बना सकते हैं।
हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि JMM की अच्छी समझ के साथ भी, समवर्ती प्रोग्रामिंग एक चुनौती बनी हुई है। java.util.concurrent पैकेज द्वारा प्रदान किए गए उच्च-स्तरीय अमूर्त का उपयोग करना अक्सर जेएमएम गारंटी का लाभ उठाते हुए विकास को सरल बना सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3