2011-10-27 12 views
9

धागे के निष्पादन आदेश को अप्रत्याशित बनाता है क्या? क्या किसी बिंदु पर शेड्यूलर यादृच्छिक संख्याओं का उपयोग करता है या सिस्टम संसाधनों की जांच करता है या देखता है कि कौन सा धागा काफी लंबा इंतजार कर रहा है या ...?धागे के निष्पादन आदेश को अप्रत्याशित बनाता है क्या?

उत्तर

10

अनुसूचक, आमतौर पर ओएस अनुसूचक है। यह कई कारकों से प्रभावित है, जिसमें मशीन पर अन्य प्रक्रियाएं क्या कर रही हैं, हार्डवेयर क्या कर रहा है (इंटरप्ट्स) इत्यादि। ओएस के आधार पर, मुझे लगता है कि कभी-कभी यादृच्छिक संख्या शामिल हो सकती है, लेकिन मुझे आम तौर पर संदेह नहीं है। यह केवल इतना अप्रत्याशित तरीका है कि एकाधिक परिवर्तनीय समय अंतराल ओवरलैप हो सकता है।

0

जेवीएम के आधार पर, जेवीएम थ्रेड को स्थानांतरित कर सकता है क्योंकि यह ओएस और ओएस शेड्यूलर थ्रेड शेड्यूल करेगा, या जेवीएम थ्रेड को शेड्यूल करने का फैसला कर सकता है, इसलिए पहला अंतर (2 अलग मशीन पर अप्रत्याशित व्यवहार चाहे धागा JVM या ओएस द्वारा अनुसूचित किया जा रहा है एक ही स्थिति) यहाँ आता है,, यू नहीं कर सकते वास्तव में यकीन है कि ..... इसके अलावा वहाँ कारकों की संख्या में हैं, धागे की प्राथमिकता एक कारक है हो (हम प्राथमिकता) सेट कर सकते हैं, संसाधन है एक और कारक .... इसकी कम संभावना है कि यादृच्छिक संख्या शामिल हैं।

+0

सभी मौजूदा मुख्यधारा के JVMs पूरी तरह से ओएस पर शेड्यूलिंग छोड़ देते हैं। कुछ पुराने जेवीएम ने हरे धागे का इस्तेमाल किया, लेकिन उस स्थिति में * सभी * थ्रेड शेड्यूलिंग को JVM द्वारा प्रबंधित किया गया था। –

+0

@ माइकलबोर्गवर्ड मुझे लगता है कि जावा 6 के लिए एससीजेपी पुस्तक को इस स्पष्टीकरण को शामिल करने की आवश्यकता है, उन्होंने किताब में पुरानी और नई जेवीएम की अंतर का जिक्र नहीं किया है! वैसे भी अद्यतन करने के लिए धन्यवाद – Zohaib

4

अनुसूचक में यादृच्छिक संख्या का उपयोग करते हुए ओएस का एक महत्वपूर्ण खंड में अनावश्यक भूमि के ऊपर का परिचय होता है, इसलिए यह बहुत संभावना नहीं है कारण है कि, कम से कम किसी भी मुख्यधारा ओएस में।

एक धागा आमतौर पर चलाता है जब तक यह एक OS कॉल कि ब्लॉक कर देगा बनाता है, या जब तक व्यवधान होता है, या जब तक अपने समय टुकड़ा समाप्त हो रहा है (जो अंततः बस एक टाइमर बाधा है)। यहां तक ​​कि यदि आप सावधानीपूर्वक चीजों का निर्माण कर सकते हैं ताकि दो धागे हमेशा एक निश्चित क्रम में अवरुद्ध हो जाएंगे, तो आपके बाद के दो प्रभाव होने पर ठीक से कोई नियंत्रण नहीं होगा। आपके आवेदन में धागे को निष्पादित करने के आदेश अंततः आपके आवेदन के बाहर की घटनाओं से प्रभावित होंगे।

0

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

यह यादृच्छिक नहीं है पर इस प्रक्रिया को प्रति एक सीपीयू की जरूरत नहीं है, लेकिन यह आम तौर पर अप्रत्याशित है।

1

अन्य प्रश्न तकनीकी जानकारी के साथ अच्छे अंक है, लेकिन:

सटीक होना, जावा में धागा शेड्यूलिंग काफी कुशलता से ताले, इंतजार द्वारा नियंत्रित किया जाता/सूचित/notifyAll, नींद तरीके और अन्य समवर्ती नियंत्रण। केवल आवेदन निष्पादन के दौरान उन समय, जब ये मौजूद नहीं हैं, विभिन्न धागे के निष्पादन आदेश को अनिर्धारित छोड़ दिया गया है।

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

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