2012-03-27 18 views
5

दोस्तों ने हाल ही में लिनक्स धागे के मामले में जावा के साथ multhreaded प्रोग्रामिंग शुरू की है, मुझे पता है कि कर्नेल उन्हें शेड्यूल करता है (क्योंकि वे इकाई इकाइयां हैं जो निर्धारित हैं) लेकिन जावा प्रोग्राम जेवीएम पर चल रहे हैं जो मेरे सिस्टम में (आरएचईएल 6.1) को एक ऐसे प्रोग्राम के रूप में कार्यान्वित किया जाता है जो उपयोगकर्ता स्पेस इंस्टेंस के रूप में चलाया जाता है। इसलिए, कर्नेल जावा जावा के बारे में जागरूक होने के बिना, जेवीएम में प्रीपेप्टिव मल्टीटास्किंग कैसे किया जाता है? अगर यह बात कर में JVM और कर्नेल बातचीत के पूरे तंत्र .Plz दिया जाता है की जानकारी के संभावित स्रोतों का हवाला देतेजावा थ्रेड कैसे निर्धारित किए जाते हैं?

+1

के लिए पर्थ्रेड व्यवहार प्राप्त नहीं होगा, लेकिन प्रत्येक जावा थ्रेड को समर्पित ओएस थ्रेड द्वारा नियंत्रित किया जाता है। इसलिए आपके ओएस को जेवीएम इत्यादि से अवगत होने की आवश्यकता नहीं है। –

उत्तर

2

पढ़ें Distinguish Java threads and OS threads? जैसा कि मैंने टिप्पणी जावा धागे में कहा साधारण ओएस धागे सिर्फ JVM कोड

चल रहा यह उपयोगी होगा
+0

हाँ, मुझे यह मिलता है लेकिन कृपया मुझे बताएं कि जेएमवी दुभाषिया द्वारा जावा कोड की व्याख्या इस बहुप्रचारित वातावरण में कैसे की जाती है – Tanay

+0

सिंक्रनाइज़ेशन क्रियाओं को छोड़कर प्रत्येक थ्रेड जावा कोड को स्वतंत्र रूप से व्याख्या करता है अगर यह एकमात्र धागा था। जब कोई नया धागा बनाया जाता है तो यह बताया जाता है कि जावा कोड किस प्रकार व्याख्या करता है। –

1

जेवीएम सिर्फ एक सामान्य प्रक्रिया है जो एक धागे से शुरू होती है और इसे बाद में जितनी अधिक थ्रेड पसंद करती है। प्रक्रियाओं के बीच और प्रक्रियाओं के अंदर धागे के बीच - दो स्तरों पर शेड्यूलिंग किया जाता है। यह सब ओएस (libs के माध्यम से) द्वारा किया जाता है - जेवीएम बस हुक करता है। अधिक जानकारी के लिए Google posix धागे - जो कि जेवीएम के लिए खुलासा (एपीआई) है। एक देशी धागा करने के लिए जावा/JVM प्रक्रिया नक्शे में http://www.ibm.com/developerworks/java/library/j-rtj3/

3

धागे और आप दोनों जावा धागा आईडी और एक धागा स्टैक ट्रेस डंप में देशी धागा आईडी देख सकते हैं:

इस विवरण में एक सा हो जाता है। अपने पसंदीदा उपकरण का उपयोग कर सभी जावा धागे की धागा ढेर हो जाओ: Ctrl + तोड़ने की तरह

  • कमांड लाइन संकेत कंसोल में (विंडोज़) या Ctrl + \ लिनक्स) जहां जावा कार्यक्रम
  • कमांड लाइन टूल चल रहा है (-QUIT या JDK से jstack)
  • JDK और/या JMX आदि में दृश्य वीएम मारने इस तरह के एक धागा डंप की पहली पंक्ति से

उदाहरण निकालने: ... टीआईडी ​​= 0x0000002adaba9c00 एनआईडी = 0x754c ...

  • टीआईडी ​​= जावा धागा आईडी

  • एनआईडी = देशी आईडी (ओएस धागा आईडी)

उपयोग ऑपरेटिंग सिस्टम के उपकरणों देशी आईडी का उपयोग कर धागा के बारे में अधिक जानने के लिए (यह हेक्स में है)।

जावा कोड आप ThreadMXBean अधिक धागा जानकारी प्राप्त कर सके प्रोग्राम के लिए यदि आप चाहते हैं अंदर

http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

0

"लेकिन जावा कार्यक्रमों JVM जो अपने सिस्टम (RHEL 6.1) में एक कार्यक्रम के रूप में लागू है पर चलाए जा रहे हैं कि एक उपयोगकर्ता अंतरिक्ष instance.So, गिरी जावा धागे के बारे में पता किया जा रहा बिना के रूप में चलाया जाता है ... "

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

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