एपोल
epoll
स्केलेबल I/O ईवेंट अधिसूचना तंत्र के लिए एक Linux कर्नेल सिस्टम कॉल है, जिसे पहली बार Linux कर्नेल के संस्करण 2.5.44 में पेश किया गया था।[1] इसका कार्य एकाधिक फ़ाइल डिस्क्रिप्टरों की निगरानी करना है ताकि यह देखा जा सके कि उनमें से किसी पर I/O संभव है या नहीं। इसका उद्देश्य पुराने POSIX सिलेक्ट (यूनिक्स)| को बदलना हैselect(2)
और poll(2)
सिस्टम कॉल, अधिक मांग वाले अनुप्रयोगों में बेहतर प्रदर्शन प्राप्त करने के लिए, जहां देखे गए फ़ाइल डिस्क्रिप्टर की संख्या बड़ी है (पुराने सिस्टम कॉल के विपरीत, जो बिग ओ नोटेशन (एन) समय में काम करते हैं, epoll
O(1) समय में संचालित होता है[2]).
epoll
FreeBSD के Kqueue| के समान हैkqueue
, इसमें उपयोगकर्ता-स्पेस फ़ंक्शंस का एक सेट शामिल है, प्रत्येक एक फ़ाइल डिस्क्रिप्टर तर्क लेता है जो कॉन्फ़िगर करने योग्य कर्नेल ऑब्जेक्ट को दर्शाता है, जिसके विरुद्ध वे सहकारी रूप से काम करते हैं। epoll
वर्तमान में मॉनिटर किए जा रहे सभी फ़ाइल डिस्क्रिप्टरों पर नज़र रखने के लिए एक लाल-काले पेड़ (आरबी-ट्री) डेटा संरचना का उपयोग करता है।[3]
एपीआई
int epoll_create1(int flags);
एक बनाता है epoll
ऑब्जेक्ट और उसका फ़ाइल डिस्क्रिप्टर लौटाता है। flags
e> पैरामीटर एपोल व्यवहार को संशोधित करने की अनुमति देता है। इसका केवल एक ही वैध मान है, EPOLL_CLOEXEC
. epoll_create()
का एक पुराना संस्करण है epoll_create1()
और इसे Linux कर्नेल संस्करण 2.6.27 और glibc संस्करण 2.9 के रूप में हटा दिया गया है।[4]
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
नियंत्रित करता है (कॉन्फ़िगर करता है) कि कौन से फ़ाइल डिस्क्रिप्टर इस ऑब्जेक्ट द्वारा देखे जाते हैं, और किन घटनाओं के लिए। op
जोड़ें, संशोधित करें या हटाएं जा सकते हैं.
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
के साथ पंजीकृत किसी भी घटना की प्रतीक्षा करता है epoll_ctl
, जब तक कि कम से कम एक घटित न हो या समय समाप्त न हो जाए। घटित घटनाओं को लौटाता है events
, तक maxevents
तुरंत। maxevents
की अधिकतम संख्या है epoll_event
/फ़ाइल डिस्क्रिप्टर की निगरानी की जाएगी।[5][6] अधिकांश मामलों में, maxevents
के आकार के मान पर सेट किया गया है *events
तर्क (struct epoll_event *events
सारणी)।
ट्रिगरिंग मोड
epoll
इंटरप्ट#एज-ट्रिगर|एज-ट्रिगर और इंटरप्ट#लेवल-ट्रिगर|लेवल-ट्रिगर दोनों मोड प्रदान करता है। एज-ट्रिगर मोड में, एक कॉल epoll_wait
केवल तभी वापस आएगा जब कोई नया इवेंट इसके साथ जोड़ा जाएगा epoll
ऑब्जेक्ट, लेवल-ट्रिगर मोड में रहते हुए, epoll_wait
जब तक स्थिति रहेगी वापस आएँगे।
उदाहरण के लिए, यदि कोई अज्ञात पाइप पंजीकृत है epoll
डेटा प्राप्त हुआ है, एक कॉल epoll_wait
पढ़ने के लिए डेटा की उपस्थिति का संकेत देते हुए वापस आ जाएगा। मान लीजिए, पाठक ने बफ़र से डेटा का केवल एक भाग ही उपभोग किया। लेवल-ट्रिगर मोड में, आगे कॉल करता है epoll_wait
तुरंत वापस आ जाएगा, जब तक पाइप के बफ़र में पढ़ने के लिए डेटा मौजूद है। हालाँकि, एज-ट्रिगर मोड में, epoll_wait
पाइप में नया डेटा लिखे जाने के बाद ही वापस आएगा।[1]
आलोचना
ब्रायन कैंट्रिल ने इस ओर इशारा किया epoll
इसमें गलतियाँ थीं जिन्हें टाला जा सकता था, अगर इसने अपने पूर्ववर्तियों से सीखा होता: इनपुट/आउटपुट पूर्णता पोर्ट, इवेंट पोर्ट (सोलारिस) और केक्यू।[7] हालाँकि, उनकी आलोचना के एक बड़े हिस्से को संबोधित किया गया था epoll
'एस EPOLLONESHOT
और EPOLLEXCLUSIVE
विकल्प. EPOLLONESHOT
फरवरी 2004 में जारी लिनक्स कर्नेल मेनलाइन के संस्करण 2.6.2 में जोड़ा गया था। EPOLLEXCLUSIVE
मार्च 2016 में जारी संस्करण 4.5 में जोड़ा गया था।[8]
यह भी देखें
- इनपुट/आउटपुट पूर्णता पोर्ट (आईओसीपी)
- क्यू
- मुक्ति घटना
संदर्भ
- ↑ 1.0 1.1 "epoll(7) - Linux manual page". Man7.org. 2012-04-17. Retrieved 2014-03-01.
- ↑ Oleksiy Kovyrin (2006-04-13). "एसिंक्रोनस नेटवर्क प्रोग्रामिंग के लिए epoll() का उपयोग करना". Kovyrin.net. Retrieved 2014-03-01.
- ↑ "एपोल का कार्यान्वयन (1)". idndx.com. September 2014.
{{cite web}}
: CS1 maint: url-status (link) - ↑ Love, Robert (2013). लिनक्स सिस्टम प्रोग्रामिंग (Second ed.). O’Reilly. pp. 97, 98. ISBN 978-1-449-33953-1.
- ↑ "epoll_wait: maxevents". Jun 3, 2010. Retrieved 2023-07-06.
- ↑ "epoll_wait(2) — Linux manual page". 2023-03-30. Retrieved 2023-07-06.
- ↑ Archived at Ghostarchive and the Wayback Machine: "Ubuntu Slaughters Kittens | BSD Now 103". YouTube.
- ↑ "Epoll is fundamentally broken 1/2". idea.popcount.org. 2017-02-20. Retrieved 2017-10-06.