ऐसा कुछ है जो मुझे जावा मेमोरी मॉडल के साथ बग करता है (अगर मैं सब कुछ ठीक से समझता हूं)। यदि दो धागे ए और बी हैं, तो इस बात की कोई गारंटी नहीं है कि बी को ए द्वारा लिखे गए मान को कभी भी देखा जाएगा, जब तक कि ए और बी दोनों एक ही मॉनिटर पर सिंक्रनाइज़ न हों।क्या जावा मेमोरी मॉडल (जेएसआर -133) का मतलब है कि मॉनीटर में प्रवेश करने से सीपीयू डेटा कैश फ्लश हो जाता है?
किसी भी सिस्टम आर्किटेक्चर के लिए जो धागे के बीच कैश कोहिरेंसी की गारंटी देता है, इसमें कोई समस्या नहीं है। लेकिन यदि आर्किटेक्चर हार्डवेयर में कैश कोहेरेंसी का समर्थन नहीं करता है, तो इसका अनिवार्य रूप से मतलब है कि जब भी कोई थ्रेड मॉनीटर में प्रवेश करता है, तो पहले की गई सभी मेमोरी में बदलाव मुख्य स्मृति में किया जाना चाहिए, और कैश को अमान्य किया जाना चाहिए। और इसे संपूर्ण डेटा कैश होने की आवश्यकता है, न केवल कुछ पंक्तियों, क्योंकि मॉनीटर की कोई जानकारी नहीं है जो स्मृति में चरम है। लेकिन यह निश्चित रूप से किसी भी एप्लिकेशन के प्रदर्शन को प्रभावित करेगा जिसे अक्सर सिंक्रनाइज़ करने की आवश्यकता होती है (विशेष रूप से छोटी दौड़ वाली नौकरियों वाली नौकरी कतार जैसी चीजें)। तो जावा बिना हार्डवेयर कैश-कोहेरेंसी के आर्किटेक्चर पर उचित रूप से काम कर सकता है? यदि नहीं, तो स्मृति मॉडल दृश्यता के बारे में मजबूत गारंटी क्यों नहीं देता है? क्या यह अधिक कुशल नहीं होगा अगर भाषा को मॉनीटर द्वारा संरक्षित जानकारी की आवश्यकता होगी?
जैसा कि मैंने देखा है कि मेमोरी मॉडल हमें दोनों दुनिया के सबसे बुरे, सिंक्रनाइज़ करने की पूर्ण आवश्यकता देता है, भले ही कैश कोहेरेंसी हार्डवेयर में गारंटी दी जाती है, और दूसरी तरफ अंतर्निहित आर्किटेक्चर (पूर्ण कैश फ्लश) पर खराब प्रदर्शन होता है। तो क्या यह अधिक सख्त नहीं होना चाहिए (मॉनिटर द्वारा संरक्षित जानकारी की आवश्यकता होती है) या कैश-सुसंगत आर्किटेक्चर के संभावित प्लेटफॉर्म को अधिक खोना और प्रतिबंधित करना चाहिए?
जैसा कि अब है, यह मेरे लिए बहुत अधिक समझ में नहीं आता है। क्या कोई साफ़ कर सकता है क्यों यह विशिष्ट मेमोरी मॉडल चुना गया था?
संपादित करें: सख्त और हार का मेरा उपयोग पीछे की ओर एक खराब विकल्प था। मैंने उस मामले के लिए "सख्त" इस्तेमाल किया जहां कम गारंटी दी जाती है और विपरीत के लिए "हार" होती है। भ्रम से बचने के लिए, मजबूत या कमजोर गारंटी के मामले में बोलना बेहतर होगा।
एक बात जिस पर टिप्पणी करने की आवश्यकता है वह कथन है "उसी मॉनीटर पर सिंक्रनाइज़ करें"। जैसा कि मैं समझता हूं कि उसी मॉनिटर पर सिंक्रनाइज़ेशन उस मॉनिटर के आस-पास निष्पादन आदेश की गारंटी देता है। हालांकि, मेमोरी कैश के मामले में, _any_ सिंक्रनाइज़ किए गए ब्लॉक को प्राप्त करने से कैश रीलोड हो जाता है और _any_ लॉक जारी करने से काम करने वाले CPU मेमोरी से सभी लिखने की फ्लश हो जाती है। – Gray
आपके मन में कौन सा विशिष्ट कमान था? – curiousguy