सामायिक संसाधने, संघर्ष, सामायिक प्रवेश - १

"हाय, अमिगो! मला तुम्हाला संसाधने सामायिक करण्याबद्दल सांगायचे आहे. नैसर्गिकरित्या वेगवेगळ्या धाग्यांवर.

"एकाहून अधिक थ्रेड्सवर काम करताना येणाऱ्या समस्या आणि त्या कशा सोडवायच्या याबद्दल मी बोलत राहते. याचा अर्थ असा नाही की थ्रेड्स वापरणे वाईट आहे. थ्रेड्स हे एक अतिशय शक्तिशाली साधन आहे. खरं तर, ते तुम्हाला तुमचा प्रोग्राम जलद आणि अगदी सहज करू देतात. अधिक विश्वासार्ह. प्रोग्राम जितका गुंतागुंतीचा असेल तितके जास्त धागे आणि विविध स्वतंत्र भाग असतील."

"प्रोग्राम स्वतंत्र (सैलपणे जोडलेल्या) भागांमध्ये विभाजित करणे खूप फायदेशीर आहे."

"कल्पना करा की तुमचा प्रोग्राम 100 थ्रेड्समध्ये विभागलेला आहे. परंतु तुमच्याकडे फक्त ड्युअल-कोर प्रोसेसर आहे. याचा अर्थ प्रत्येक कोरवर सरासरी 50 थ्रेड कार्यान्वित केले जातील."

"जर तुम्हाला प्रोग्रामचा परफॉर्मन्स वाढवायचा असेल, तर तुम्ही फक्त एक ड्युअल-प्रोसेसर सर्व्हर आणि काही गोड प्रोसेसर विकत घ्या. यामुळे तुम्हाला 32 कोर मिळू शकतात, ज्यामुळे परफॉर्मन्समध्ये 2-20 पट वाढ होईल. संख्येवर अवलंबून ते खरोखर स्वतंत्र भागांमध्ये विभागले गेले आहे."

"एंटरप्राइझ डेव्हलपमेंटमध्ये जावाचे वर्चस्व असण्याचे हे एक कारण आहे. जर एखाद्या कंपनीमध्ये 20 विकासकांनी लिहिलेला एक जटिल अंतर्गत प्रोग्राम असेल, तर ऑप्टिमायझेशनद्वारे प्रोग्रामची कार्यक्षमता दुप्पट करण्यापेक्षा दुसरा सर्व्हर खरेदी करणे खूप स्वस्त आहे."

"म्हणजे हे सर्व काय आहे ते आहे."

"पण! प्रत्येक वेळी विकासक दुसरा थ्रेड वापरण्याचा निर्णय घेतो, तो एक समस्या सोडवतो आणि दोन तयार करतो. अधिकाधिक थ्रेड्स प्रोग्रामच्या कार्यक्षमतेत सतत वाढ करणार नाहीत."

"प्रथम, कोणत्याही प्रोग्रॅममध्ये असे कार्य असते जे वेगळे केले जाऊ शकत नाही आणि वेगवेगळ्या थ्रेड्सवर समांतर चालवले जाऊ शकत नाही. दुसरे, सर्व थ्रेड्स एकाच प्रोसेसरवर कार्यान्वित केले जातात. तुमच्याकडे जितके जास्त थ्रेड्स असतील तितके प्रत्येक धीमे कार्य करते."

"आणि, सर्वात महत्त्वाचे म्हणजे, थ्रेड्स अनेकदा समान वस्तू वापरतात (सामान्यतः 'सामायिक संसाधने' म्हणतात)."

"उदाहरणार्थ, एखाद्या थ्रेडला फाईलमध्ये पूर्ण केलेल्या कामाची माहिती जतन करायची आहे. जर असे अनेक धागे असतील आणि त्यांना एकाच फाइलवर माहिती लिहायची असेल, तर ते एकमेकांमध्ये व्यत्यय आणतील. फाईल बनण्यापासून रोखण्यासाठी गोंधळलेला गोंधळ, फाईलमध्ये प्रवेश मर्यादित आहे, म्हणजे एक धागा फाईल वापरत असताना, इतर प्रतीक्षा करतात."

"हो, मला आठवतंय. तुम्ही ते सिंक्रोनाइझ केलेला कीवर्ड वापरून करता."

"अगदी बरोबर."

"आणि जर धागे वेगवेगळ्या फाईल्सवर लिहित असतील तर?"

"औपचारिकपणे, या भिन्न वस्तू आहेत, परंतु त्या कदाचित एकाच हार्ड ड्राइव्हवर आहेत."

"तर, प्रोसेसरच्या आत काहीतरी समांतर करणे खरोखर शक्य आहे का?"

"तांत्रिकदृष्ट्या, होय, परंतु तुमच्या थ्रेडला त्याच्याकडे असलेल्या डेटाव्यतिरिक्त काहीतरी आवश्यक आहे, जे काही आधीच दुसर्‍या थ्रेडने व्यापलेले असेल - आणि तुमच्या थ्रेडला प्रतीक्षा करावी लागेल."

"बरं, मग मी काय करू? मला कसे कळणार की मी खूप धागे काढले पाहिजेत की नाही?"

"हे थेट तुमच्या प्रोग्रामच्या आर्किटेक्चरद्वारे निर्धारित केले जाते. प्रत्येक प्रोजेक्टचा स्वतःचा 'आर्किटेक्ट' असतो ज्याला प्रोग्राममध्ये वापरलेली सर्व 'संसाधने' माहीत असतात, त्यांच्या मर्यादा माहित असतात आणि ते किती चांगल्या/खराब रीतीने समांतरित आहेत हे माहीत असते."

"आणि मला माहित नसेल तर?"

"दोन पर्याय आहेत:"

अ) कोणाच्या देखरेखीखाली काम करा

ब) काही गुठळ्या मिळवा आणि ते स्वतःच शोधून काढा

"मी एक रोबोट आहे: मला गुठळ्या होत नाहीत - फक्त डेंट्स."

"बरं, मग काही डेंट घ्या."

"मी पाहतो. धन्यवाद. तुम्ही काही गोष्टी स्पष्ट केल्या ज्याबद्दल मला आधीच आश्चर्य वाटू लागले होते."