2016-03-11 16 views
6

के बीच अंतर मैंने निम्नलिखित पोस्टिंग के माध्यम से जवाब पढ़ा है: Difference between WAIT and BLOCKED thread states हालांकि, मैं अभी भी परेशान हूं।थ्रेड राज्य अवरुद्ध और प्रतीक्षा

मैं जानना चाहता हूं कि जेवीएम स्तर पर क्या अंतर है और सीपीयू स्तर पर क्या अंतर है।

क्या इनमें से दोनों में "थ्रेड संदर्भ स्विच" है? , जो एक बहुप्रचारित वातावरण पर तेजी से है?

उत्तर

1

मानते हैं कि आप Thread.State.BLOCKED और Thread.State.WAITING (यानी t.getState() द्वारा लौटाए गए) के बीच अंतर पूछ रहे हैं?

मुझे पता है कि क्या JVM स्तर पर अंतर नहीं है चाहते हैं और सीपीयू

नीचे से ऊपर कार्य पर क्या अंतर है, वहाँ हार्डवेयर स्तर पर कोई अंतर नहीं है क्योंकि उन राज्यों हार्डवेयर अवधारणाओं नहीं हैं । प्रतीक्षा धागे और ब्लॉक किए गए धागे CPU संसाधनों का उपयोग नहीं करते हैं। यदि कोई सीपीयू आपके प्रोग्राम का कोड नहीं चला रहा है, तो यह या तो चल रहा कोड है जो किसी अन्य प्रक्रिया से संबंधित है या ऑपरेटिंग सिस्टम में है; अन्यथा यह एक निष्क्रिय स्थिति में है जिसका जावा या जेवीएम से कोई लेना देना नहीं है।


फिर, आपने एक परत - ऑपरेटिंग सिस्टम छोड़ दिया। सभी व्यावहारिक जेवीएम ऑपरेटिंग सिस्टम द्वारा प्रदान किए गए थ्रेडिंग प्राइमेटिव्स का उपयोग कर जावा थ्रेड को कार्यान्वित करते हैं।

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

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

आमतौर पर रन कतार चलाने के लिए तैयार धागे को पकड़ते हैं, लेकिन जो सीपीयू चलाने के लिए प्रतीक्षा कर रहे हैं। फिर प्रत्येक mutex (a.k.a. के लिए एक कतार है, ताला) कि धागे कि म्युटेक्स, प्रत्येक हालत चर कि धागे रखती है के लिए एक कतार है कि है कि हालत के बारे में notify() घ इंतजार कर रहे हैं, आदि

जब भी कुछ धागा एक म्युटेक्स पत्ते दर्ज करने के लिए इंतजार कर रखती है, ऑपरेटिंग सिस्टम उस म्यूटेक्स के लिए कतार को देखता है। यदि कतार खाली नहीं है, तो यह उस कतार से धागा उठाता है और इसे रन कतार में ले जाता है। जब भी कुछ थ्रेड o.notify() पर कॉल करते हैं, तो ओएस उस स्थिति चर के कतार से एक थ्रेड चुनता है और इसे रन कतार में ले जाता है या, यदि प्रोग्राम notifyAll() पर कॉल करता है, तो ओएस उस कतार से सभी कतारों को रन कतार में ले जाता है।

तो, ओएस स्तर पर, यह नहीं इतना क्या राज्य में धागा है का सवाल है, के रूप में यह एक सवाल जिनमें से कतार में धागा है।


अंत में , जेवीएम स्तर पर, कहने के लिए बहुत कुछ नहीं बचा है क्योंकि जेवीएम ओएस को सभी कामों को बहुत अधिक करने देता है। जावा दो राज्यों, रनिंग और प्रतीक्षा करने के लिए केवल एक सुविधा के रूप में, प्रोग्रामर प्रदान करता है, यदि यह आपके लिए अंतर जानने के लिए उपयोगी है। (संकेत: जब आप प्रोग्राम के डंप को देख रहे हों, और यह पता लगाने की कोशिश कर रहा है कि उस समय प्रत्येक थ्रेड क्या कर रहा था।)

+0

बहुत बहुत धन्यवाद। यह मुद्दा मेरे कई दिन .. धन्यवाद आपका जवाब .. मैं समझ गया हूँ .. – Timi

0

प्रतीक्षा स्थिति तब होती है जब थ्रेड जानबूझकर प्रतीक्षा() विधि कहा जाता है। इसका मतलब है कि यह कुछ घटना/कार्य पूरा करने की प्रतीक्षा कर रहा है। जैसे आप ग्राहक देखभाल और कतार में जाते हैं खाली है। आप अपनी पत्नी को वारंटी कार्ड के साथ आने का इंतजार कर रहे हैं। तो आप जानबूझ कर इंतजार कर रहे हैं।

लेकिन ब्लॉक किए गए राज्य में, थ्रेड चलाने के लिए तैयार है लेकिन अन्य घटनाओं ने इसे किसी कारण से अवरुद्ध कर दिया है। एक थ्रेड की तरह एक सिंक्रनाइज़ ब्लॉक में प्रवेश करने वाला है, लेकिन एक ही ऑब्जेक्ट पर सिंक्रनाइज़ किए गए ब्लॉक के अंदर वर्तमान में एक और थ्रेड चल रहा है।

एक और उदाहरण कुछ घटनाओं को पूरा करने के लिए प्रतीक्षा विधि नामक एकाधिक धागा है। एक बार यह घटना पूरी होने के बाद, सूचित करें सभी() को बुलाया जाता है। फिर केवल एक थ्रेड को सीपीयू चक्र मिलेगा अन्य को अभी भी अवरुद्ध कर दिया जाएगा

इसकी तरह आप ग्राहक देखभाल पर जाते हैं और कोई ग्राहक प्रतिनिधि मौजूद नहीं है। आप अवरुद्ध हैं

+0

सीपीयू और जेवीएम स्तर पर क्या अंतर है? क्या सीपीयू प्रतीक्षा या अवरुद्ध में थ्रेड शेड्यूलर करेगा ... आपसे कैसे सोचता है। – Timi

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