साझा संसाधन, विरोध, साझा पहुंच - 1

"हाय, अमीगो! मैं आपको संसाधनों को साझा करने के बारे में बताना चाहता हूं। स्वाभाविक रूप से विभिन्न थ्रेड्स में।

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

"एक कार्यक्रम को स्वतंत्र (शिथिल युग्मित) भागों में विभाजित करना बहुत फायदेमंद है।"

"कल्पना करें कि आपका प्रोग्राम आंतरिक रूप से 100 थ्रेड्स में विभाजित है। लेकिन आपके पास केवल एक डुअल-कोर प्रोसेसर है। इसका मतलब है कि प्रत्येक कोर पर औसतन 50 थ्रेड्स निष्पादित किए जाएंगे।"

"यदि आपको प्रोग्राम के प्रदर्शन को बढ़ाने की आवश्यकता है, तो आप बस इसके लिए एक डुअल-प्रोसेसर सर्वर और कुछ अच्छे प्रोसेसर खरीदते हैं। यह आपको 32 कोर तक प्राप्त कर सकता है, जिससे प्रदर्शन में 2-20 गुना वृद्धि होती है। संख्या के आधार पर वास्तव में स्वतंत्र भागों में इसे विभाजित किया गया है।"

"यह एक कारण है कि क्यों उद्यम विकास में जावा हावी है। यदि किसी कंपनी के पास 20 डेवलपर्स द्वारा लिखित एक जटिल आंतरिक प्रोग्राम है, तो अनुकूलन के माध्यम से प्रोग्राम के प्रदर्शन को दोगुना करने की तुलना में एक और सर्वर खरीदना बहुत सस्ता है।"

"तो यह वही है जो इसके बारे में है।"

"लेकिन! हर बार जब कोई डेवलपर किसी अन्य थ्रेड का उपयोग करने का निर्णय लेता है, तो वह एक समस्या हल करता है और दो बनाता है। अधिक से अधिक थ्रेड प्रोग्राम के प्रदर्शन को अंतहीन रूप से नहीं बढ़ाएंगे।"

"सबसे पहले, किसी भी प्रोग्राम में काम होता है जिसे अलग नहीं किया जा सकता है और अलग-अलग थ्रेड्स पर समानांतर में चलाया जा सकता है। दूसरा, सभी थ्रेड्स एक ही प्रोसेसर पर निष्पादित होते हैं। आपके पास जितने अधिक थ्रेड्स होते हैं, हर एक उतना ही धीमा काम करता है।"

"और, सबसे महत्वपूर्ण बात यह है कि धागे अक्सर एक ही वस्तु का उपयोग करते हैं (आमतौर पर 'साझा संसाधन' कहा जाता है)।"

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

"हाँ, मुझे याद है। आप इसे सिंक्रोनाइज़्ड कीवर्ड का उपयोग करके करते हैं।"

"बिल्कुल सही।"

"और क्या होगा अगर धागे अलग-अलग फाइलों पर लिख रहे हैं?"

"औपचारिक रूप से, ये अलग-अलग वस्तुएं हैं, लेकिन वे शायद एक ही हार्ड ड्राइव पर हैं।"

"तो, क्या वास्तव में प्रोसेसर के अंदर कुछ समानांतर करना संभव है?"

"तकनीकी रूप से, हाँ, लेकिन जैसे ही आपके थ्रेड को उसके पास मौजूद डेटा के अलावा किसी चीज़ की आवश्यकता होती है, तो हो सकता है कि कुछ पहले से ही किसी अन्य थ्रेड द्वारा कब्जा कर लिया गया हो - और आपके थ्रेड को प्रतीक्षा करनी होगी।"

"ठीक है, तो मुझे क्या करना चाहिए? मुझे कैसे पता चलेगा कि मुझे बहुत सारे धागे बनाना चाहिए या नहीं?"

"यह सीधे आपके प्रोग्राम के आर्किटेक्चर द्वारा निर्धारित किया जाता है। प्रत्येक प्रोजेक्ट का अपना 'वास्तुकार' होता है जो प्रोग्राम में उपयोग किए जाने वाले सभी 'संसाधनों' को जानता है, उनकी सीमाओं को जानता है, और वे कितनी अच्छी तरह/खराब समानांतर हैं।"

"और अगर मुझे नहीं पता?"

"दो विकल्प हैं:"

क) किसी ऐसे व्यक्ति की देखरेख में काम करता है जो करता है

बी) अपने दम पर इसका पता लगाने के लिए कुछ गांठें प्राप्त करें

"मैं एक रोबोट हूं: मुझे गांठ नहीं मिलती- केवल डेंट।"

"ठीक है, फिर, कुछ डेंट प्राप्त करें।"

"ठीक है। धन्यवाद। आपने कुछ चीजें स्पष्ट की हैं जिनके बारे में मुझे पहले से ही आश्चर्य हो रहा था।"