मेरे पास एक बहुत ही बुनियादी सवाल है। यदि आईओ ऑपरेशन में कोई धागा व्यस्त है तो इसे एक रनिंग राज्य में क्यों नहीं माना जाता है? यदि आईओ ऑपरेशन में काफी समय लग रहा है तो इसका मतलब है कि धागा अपना काम कर रहा है। जब वास्तव में यह काम कर रहा है तो थ्रेड को ब्लॉक्ड कहा जा सकता है?जावा थ्रेड - अवरुद्ध स्थिति
उत्तर
मुझे नहीं पता कि आप कहां पढ़ते हैं कि आईओ करते समय एक धागा ब्लॉक किए गए राज्य में है। BLOCKED state documentation कहता है:
एक थ्रेड के लिए थ्रेड स्थिति मॉनिटर लॉक के लिए प्रतीक्षा अवरुद्ध है। अवरुद्ध स्थिति में एक थ्रेड एक मॉनिटर लॉक को सिंक्रनाइज़ किए गए ब्लॉक/विधि में प्रवेश करने के लिए इंतजार कर रहा है या ऑब्जेक्ट.वेट को कॉल करने के बाद सिंक्रनाइज़ ब्लॉक/विधि को पुन: प्रस्तुत करता है।
तो, नहीं, आईओ करने के दौरान एक थ्रेड अवरुद्ध स्थिति में नहीं है (जब तक कि पाठ्यक्रम को पढ़ने या लिखने के लिए इसे ऑब्जेक्ट के मॉनीटर पर इंतजार न किया जाए)।
आप एक धागा
public class Main {
public static void main(String[] args) throws InterruptedException {
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// blocking read
try {
System.in.read();
} catch (IOException e) {
throw new AssertionError(e);
}
}
});
thread.start();
for(int i=0;i<3;i++) {
System.out.println("Thread status: "+thread.getState());
Thread.sleep(200);
}
System.exit(0);
}
}
प्रिंट आईओ पर अवरुद्ध
Thread status: RUNNABLE
Thread status: RUNNABLE
Thread status: RUNNABLE
तो, IO को अवरुद्ध करने पर एक थ्रेड स्टेट 'रननाबल' होना कुछ भी नहीं है, लेकिन सीपीयू टाइम स्लाइस पर कब्जा कर रहा है, आईओ प्रतिक्रिया पर इंतजार कर कुछ भी नहीं कर रहा है। यही है ना – overexchange
@ threadxchange जब कोई थ्रेड अवरुद्ध हो रहा है, तो यह CPU का उपयोग नहीं करता है (इस मोड को दर्ज करने और बाहर निकलने के अलावा) भ्रम इस तथ्य के कारण है कि JVM को पता नहीं है कि अवरोधक सिस्टम कॉल कब किया जाता है क्योंकि ओएस इसे तय करता है । –
आवंटित समय स्लाइस के बावजूद, आईओ को अवरुद्ध करने पर धागा, उस समय स्लाइस के लिए सीपीयू की आवश्यकता नहीं है, जिसे समझा जाता है, लेकिन उस समय के टुकड़े के लिए कोई अन्य धागा उस CPU का उपयोग नहीं कर रहा है। यही है ना – overexchange
- 1. जावा थ्रेड अवरुद्ध
- 2. जावा थ्रेड प्रतीक्षा() => अवरुद्ध?
- 3. कॉर्डोवा प्लगइन थ्रेड अवरुद्ध
- 4. अवरुद्ध बूस्ट :: थ्रेड
- 5. अवरुद्ध करने और थ्रेड एक्सेस ऑर्डर
- 6. जावा समेकित गैर-अवरुद्ध बफर उच्च समवर्ती स्थिति
- 7. थ्रेड राज्य अवरुद्ध और प्रतीक्षा
- 8. टास्क निरंतरता अवरुद्ध यूआई थ्रेड
- 9. प्रोफाइलिंग जावा: पता लगाएं कि थ्रेड समय अवरुद्ध समय
- 10. जावा गैर-अवरुद्ध सॉकेट
- 11. जावा BufferedReader रीडलाइन अवरुद्ध?
- 12. क्रोम में वर्कर अवरुद्ध यूआई थ्रेड
- 13. जावा शटडाउन हुक थ्रेड
- 14. जेरा जेक्यूएल: अवरुद्ध स्थिति द्वारा रंगीन कार्ड
- 15. जावा थ्रेड
- 16. थ्रेड जावा
- 17. थ्रेड। जावा
- 18. जावा अवरुद्ध में आउटपुटस्ट्रीम है? (सॉकेट)
- 19. जावा थ्रेड बनाम ओएस थ्रेड
- 20. जावा थ्रेड ब्लॉक। क्या करें?
- 21. libGDX में जावा थ्रेड
- 22. जावा में कतार को अवरुद्ध करने के क्या फायदे हैं?
- 23. जावा में समवर्ती और अवरुद्ध कतार
- 24. जावा में प्रति-कुंजी अवरुद्ध मानचित्र
- 25. थ्रेड किसी एमवीआर ऑपरेशन में अनिश्चित काल तक अवरुद्ध
- 26. अवरुद्ध सॉकेट कनेक्ट करने वाले थ्रेड को बाधित कैसे करें?
- 27. अवरुद्ध रूप से एक थ्रेड को समाप्त करना जो अवरुद्ध कतार
- 28. जावा कैश्ड थ्रेड पूल और थ्रेड स्थानीय
- 29. "मल्टीप्लेक्ड, गैर-अवरुद्ध I/O, [..] थ्रेड-उन्मुख, अवरुद्ध I/O से अधिक स्केलेबल क्यों है?
- 30. वर्किंग थ्रेड में जावा स्विंग उपयोगकर्ता को अवरुद्ध करने के लिए पैटर्न
जांच इस के साथ निम्न कोड चलाते हैं http://stackoverflow.com/questions/13596997/why-is-the- cpu-not-required-to-service-io-request – Changgeng
यह कोई काम नहीं कर रहा है, यह कोर पर नहीं चल रहा है, यह कोई CPU का उपयोग नहीं कर रहा है, इसलिए इसे 'रनिंग' पर विचार करना बिल्कुल उचित नहीं है! –
शायद आप थ्रेड संदर्भ में "अवरुद्ध" शब्द को "अवरुद्ध I/O ऑपरेशन" के साथ भ्रमित करते हैं जिसका अर्थ कुछ अलग है। – BartoszKP