2010-05-12 10 views
12

मैं वास्तव में उत्सुक हूं कि जेवीएम धागे के साथ कैसे काम करता है! इंटरनेट में मेरी खोजों में, मुझे आरटीएसजे के बारे में कुछ सामग्री मिली, लेकिन मुझे नहीं पता कि यह मेरे उत्तरों के लिए सही दिशा है या नहीं। मुझे इस विषय को सूर्य के मंचों में भी मिला, http://forums.sun.com/thread.jspa?forumID=513&threadID=472453, लेकिन यह संतोषजनक नहीं है।जेवीएम शेड्यूलिंग एल्गोरिदम क्या है?

क्या कोई मुझे JVM शेड्यूलिंग एल्गोरिदम के बारे में कुछ निर्देश, सामग्री, लेख या सुझाव दे सकता है?

मैं टाइम-स्लाइसिंग के मामले में शेड्यूलर में जावा थ्रेड की डिफ़ॉल्ट कॉन्फ़िगरेशन के बारे में जानकारी भी ढूंढ रहा हूं, जैसे 'प्रत्येक थ्रेड के लिए कितना समय लगता है'। और यह सामान।

मैं किसी भी मदद की सराहना करता हूं!

धन्यवाद!

उत्तर

17

कोई भी जावा वर्चुअल मशीन नहीं है; जेवीएम एक विनिर्देश है, और इसमें कई कार्यान्वयन हैं, जिनमें ओपनजेडीके संस्करण और इसके सूर्य संस्करण शामिल हैं। मुझे निश्चित रूप से पता नहीं है, लेकिन मुझे लगता है कि कोई भी उचित जेवीएम ओएस द्वारा प्रदान की गई अंतर्निहित थ्रेडिंग तंत्र का उपयोग करेगा, जो यूनिक्स (मैक ओएस एक्स, लिनक्स इत्यादि) पर पॉज़िक्स थ्रेड (पर्थ्रेड) का संकेत देगा और विंडोज़ पर WIN32 धागे का मतलब है। आम तौर पर, वे सिस्टम डिफ़ॉल्ट रूप से एक राउंड-रॉबिन रणनीति का उपयोग करते हैं।

+0

जावा वर्चुअल मशीन विशिष्टता (http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html) या "JVM spec" है। लेकिन जब कोई "एक जेवीएम" या "जेवीएम" के बारे में बात करता है, तो वे आमतौर पर spec का एक कार्यान्वयन का मतलब है, न कि खुद को कल्पना। –

+0

@ सॉयर, हां, शब्द "जेवीएम" एक एकल जेवीएम का तात्पर्य है, और यह एक विशेष जेवीएम (जैसे सूर्य हॉटस्पॉट जेवीएम) के बारे में चर्चा के संदर्भ में समझ में आता है, यह किसी विशेष रूप से स्थापित किए बिना कोई समझ नहीं लेता है जेवीएम पर चर्चा की जा रही है। –

+0

व्यक्तिगत रूप से मैं अक्सर खुद को कहता हूं कि "जेवीएम कक्षा लोड करेगा ..." या "जेवीएम सुनिश्चित करेगा, कि ..." जो * निश्चित रूप से * कार्यान्वयन को संदर्भित करता है, हालांकि यह चर्चा के लिए प्रासंगिक नहीं है ठोस कार्यान्वयन मैं बात कर रहा हूँ। दूसरी तरफ, जब मैं विशेष रूप से विनिर्देश के बारे में बात कर रहा हूं, तो यह ध्यान दिया जाना चाहिए "जेवीएम स्पेक निर्दिष्ट करता है, वह ..." या ऐसा कुछ। –

2

ऐसा नहीं है। JVM ऑपरेटिंग सिस्टम देशी धागे का उपयोग करता है, इसलिए ओएस शेड्यूलिंग करता है, न कि JVM।

+2

कुछ JVMs अपने स्वयं के धागे प्रबंधित करते हैं। प्रारंभिक सूर्य जेवीएम ने ऐसा किया। कुछ आधुनिक छोटे एम्बेडेड जेवीएम भी ऐसा करते हैं। –

+0

@ विल हार्टंग: सच, http://en.wikipedia.org/wiki/Green_threads का कहना है कि हॉटस्पॉट जेवीएम ने 1.2 दिनों –

+0

संख्या के बाद देशी धागे का उपयोग किया है, लेख कहता है कि 1.1 जेवीएम ने उन्हें सोलारिस पर इस्तेमाल किया, और मुझे याद है लिनक्स जेवीएम द्वारा इसका इस्तेमाल किया जा रहा था जब इसे अभी भी ब्लैकडाउन कहा जाता था, लेकिन मुझे पूरा यकीन है कि हॉटस्पॉट (जो केवल 1.3 में जेवीएम का हिस्सा बन गया) कभी भी हरे धागे का उपयोग नहीं करता था। –

2

कुछ समय पहले मैंने जावा के दृष्टिकोण से thread scheduling पर कुछ लेख लिखे थे। हालांकि, मुख्यधारा के प्लेटफ़ॉर्म पर, थ्रेडिंग व्यवहार अनिवार्य रूप से अंतर्निहित ओएस थ्रेडिंग पर निर्भर करता है।

Java thread priority है क्या पर अपने पेज पर विशेष रूप से एक नज़र है, जो बताते हैं जावा के प्राथमिकता के स्तर अंतर्निहित ओएस सूत्रण प्राथमिकताओं को मैप कैसे है, और कैसे व्यवहार में यह अलग प्राथमिकताओं के धागे लिनक्स बनाम विंडोज पर व्यवहार करते हैं बनाता है। चर्चा में एक बड़ा अंतर यह है कि लिनक्स के तहत थ्रेड प्राथमिकता और थ्रेड को आवंटित सीपीयू के अनुपात के बीच अधिक संबंध हैं, जबकि विंडोज के तहत यह सीधे मामला नहीं है (ग्राफ देखें)।

0

मेरे पास टिप्पणी अधिकार नहीं हैं इसलिए लेखन यहां है ... JVM प्रत्येक संबंधित अनुरोध के लिए pthreads (आमतौर पर थ्रेडिंग तंत्र, अन्य रूपों का उपयोग किया जाता है) का आह्वान करता है। लेकिन यहां शेड्यूलिंग ओएस द्वारा मेजबान के रूप में पूरी तरह से किया जाता है। लेकिन यह एक पसंदीदा दृष्टिकोण है और इन धागे को JVM द्वारा शेड्यूल करना संभव है। उदाहरण के लिए जैक्स आरवीएम में ओएस निर्णय के इस दृष्टिकोण को ओवरराइड करने के विकल्प हैं। उदाहरण के लिए, इसमें धागे को RVMThread के रूप में संदर्भित किया जाता है और उन्हें org.jikesrvm.schedular पैकेज कक्षाओं का उपयोग करके निर्धारित/छेड़छाड़ की जा सकती है। अधिक reference

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