2012-05-16 16 views
16

जावा में लिनक्स एपोल के बराबर है?क्या जावा में एपोल बराबर है?

epoll एक धागा heterogenous घटनाओं की एक संख्या के लिए प्रतिक्रिया करने के लिए अनुमति देता है। उदाहरण के लिए, मेरे पास एक धागा हो सकता है जो किसी सॉकेट ईवेंट या कंसोल से इनपुट पर प्रतिक्रिया करता है। सी ++ में मैं एपोल के साथ स्टेडियो और सॉकेट को पंजीकृत करके इसे कार्यान्वित कर सकता हूं। मेरा धागा किसी भी घटना से या तो इनके द्वारा ट्रिगर किया जाएगा।

वहाँ जावा में एक ऐसी ही सुविधा है? मैंने एनओओ पैकेज को देखा, यह मुझे चयनकर्ता के साथ कई सॉकेट पंजीकृत करने की अनुमति देता है। लेकिन एक चयनकर्ता के साथ कंसोल/मानक io रजिस्टर करने के लिए दूर प्रतीत नहीं होता है। क्या मैं कुछ नहीं देख रहा हूँ? क्या इसे करने का और कोई तरीका है?

पर "क्यों": मैं एक प्रोग्राम है जो सॉकेट के माध्यम से संचार लिखना चाहते हैं, और मैं कंसोल से आदेश दर्ज करके इस कार्यक्रम चलाना चाहते हैं। मुझे पता है कि कंसोल इनपुट और संचार को अलग-अलग धागे से अलग करके यह कैसे किया जा सकता है, लेकिन मैं उत्सुक हूं कि एक धागे में ऐसा करने का कोई तरीका है या नहीं।

धन्यवाद। df

+4

आप एक कदम पीछे जाएं और अपनी पोस्ट को संपादित की व्याख्या करने के _why_ आप ऐसा करना चाहते हैं कर सकते हैं? – Gray

+0

ठीक है, मैंने पोस्ट अपडेट किया है। – dfreit

+0

मुझे लगता है कि मानक 'इनपुट कंसोल' शायद होगा 'System.in' (यद्यपि आप संदर्भ इंजेक्षन चाहिए, हार्ड-कोड का उपयोग करें)। हालांकि, ऐसा नहीं लगता है कि यह घटनाएं उत्पन्न करता है (यानी - कोई 'रजिस्टर() 'या समान विधि नहीं है), इसलिए मुझे नहीं लगता कि आपके जैसे डिफ़ॉल्ट व्यवहार है। इस व्यवहार को प्रदान करने के लिए आपको कुछ लिखना होगा (या ढूंढना होगा)। –

उत्तर

4

हाँ, nio पैकेज Selector रों जो poll()/select() की कार्यक्षमता बराबर की आपूर्ति के उपयोग की अनुमति देता है और वास्तव में कार्यान्वयन में से एक के रूप में बैकएंड epoll का उपयोग करता है (इस java.nio.channels.spi.SelectorProvider जावा संपत्ति के माध्यम से चयन किया जाता है)। चयनकर्ता आमतौर पर नेटवर्क सॉकेट के साथ उपयोग किए जाते हैं, लेकिन यदि आप दस्तावेज़ों में विभिन्न Channel कार्यान्वयन को देखते हैं, तो मुझे लगता है कि यह संभव है कि आप मानक तंत्र के साथ इस तंत्र का उपयोग करने में सक्षम होंगे (वहां सहायक वर्ग हैं जो पुरानी Stream के बीच चलने की अनुमति देते हैं - आधारित एपीआई और nio कुछ डिग्री के लिए एपीआई)। जावा SE 6

java.nio

एक नया java.nio.channels.SelectorProvider कार्यान्वयन कि लिनक्स epoll घटना अधिसूचना सुविधा पर आधारित है में

+2

आप नहीं कर सकते। आप एक 'Selector' कि एक' SelectableChannel' नहीं है, और केवल 'SelectableChannels' के साथ किसी भी चैनल पंजीकृत नहीं कर सकता सॉकेट चैनलों और पाइप चैनल हैं। – EJP

19

संवर्द्धन शामिल है। एपोल सुविधा लिनक्स 2.6, और नए, कर्नेल में उपलब्ध है। नए एपोल-आधारित सिलेक्टरप्रोवाइडर कार्यान्वयन पारंपरिक चुनाव-आधारित चयनकर्ता प्रदाता कार्यान्वयन से अधिक स्केलेबल है जब चयनकर्ता के साथ पंजीकृत हजारों चयन योग्य चैनल हैं। जब 2.6 कर्नेल का पता चला है तो नया चयनकर्ता प्रदाता कार्यान्वयन डिफ़ॉल्ट रूप से उपयोग किया जाएगा। पूर्व-2.6 कर्नेल का पता चला है जब मतदान-आधारित SelectorProvider का उपयोग किया जाएगा।

https://docs.oracle.com/javase/8/docs/technotes/guides/io/enhancements.html

+0

क्या यह गैर-लिनक्स जावा कार्यान्वयन के लिए पोर्टेबल है? साथ ही, क्या आप कंसोल पर 'selectorProvider' प्राप्त कर सकते हैं? – Gray