एपोल: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Linux-specific system call for a scalable I/O event notification mechanism}}
{{Short description|Linux-specific system call for a scalable I/O event notification mechanism}}
<code>epoll</code>स्केलेबल I/O ईवेंट अधिसूचना तंत्र के लिए एक Linux कर्नेल [[सिस्टम कॉल]] है, जिसे पहली बार Linux कर्नेल के संस्करण 2.5.44 में पेश किया गया था।<ref name="epoll(7) - Linux manual page">{{cite web |url=http://man7.org/linux/man-pages/man7/epoll.7.html |title=epoll(7) - Linux manual page |publisher=Man7.org |date=2012-04-17 |access-date=2014-03-01}}</ref> इसका कार्य एकाधिक फ़ाइल डिस्क्रिप्टरों की निगरानी करना है ताकि यह देखा जा सके कि उनमें से किसी पर I/O संभव है या नहीं। इसका उद्देश्य पुराने [[POSIX]] सिलेक्ट (यूनिक्स)| को बदलना है<code>select(2)</code>और <code>poll(2)</code> सिस्टम कॉल, अधिक मांग वाले अनुप्रयोगों में बेहतर प्रदर्शन प्राप्त करने के लिए, जहां देखे गए [[फ़ाइल डिस्क्रिप्टर]] की संख्या बड़ी है (पुराने सिस्टम कॉल के विपरीत, जो बिग ओ नोटेशन (एन) समय में काम करते हैं, <code>epoll</code> O(1) समय में संचालित होता है<ref>{{cite web |url=http://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming |title=एसिंक्रोनस नेटवर्क प्रोग्रामिंग के लिए epoll() का उपयोग करना|author=Oleksiy Kovyrin |publisher=Kovyrin.net |date=2006-04-13 |access-date=2014-03-01}}</ref>).
<code>epoll</code>स्केलेबल I/O ईवेंट अधिसूचना तंत्र के लिए Linux कर्नेल [[सिस्टम कॉल]] है, जिसे पहली बार Linux कर्नेल के संस्करण 2.5.44 में पेश किया गया था।<ref name="epoll(7) - Linux manual page">{{cite web |url=http://man7.org/linux/man-pages/man7/epoll.7.html |title=epoll(7) - Linux manual page |publisher=Man7.org |date=2012-04-17 |access-date=2014-03-01}}</ref> इसका कार्य ाधिक फ़ाइल डिस्क्रिप्टरों की निगरानी करना है ताकि यह देखा जा सके कि उनमें से किसी पर I/O संभव है या नहीं। इसका उद्देश्य पुराने [[POSIX]] सिलेक्ट (यूनिक्स)| को बदलना है<code>select(2)</code>और <code>poll(2)</code> सिस्टम कॉल, अधिक मांग वाले अनुप्रयोगों में बेहतर प्रदर्शन प्राप्त करने के लिए, जहां देखे गए [[फ़ाइल डिस्क्रिप्टर]] की संख्या बड़ी है (पुराने सिस्टम कॉल के विपरीत, जो बिग ओ नोटेशन (एन) समय में काम करते हैं, <code>epoll</code> O(1) समय में संचालित होता है<ref>{{cite web |url=http://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming |title=एसिंक्रोनस नेटवर्क प्रोग्रामिंग के लिए epoll() का उपयोग करना|author=Oleksiy Kovyrin |publisher=Kovyrin.net |date=2006-04-13 |access-date=2014-03-01}}</ref>).


<code>epoll</code> [[FreeBSD]] के Kqueue| के समान है<code>kqueue</code>, इसमें उपयोगकर्ता-स्पेस फ़ंक्शंस का एक सेट शामिल है, प्रत्येक एक फ़ाइल डिस्क्रिप्टर तर्क लेता है जो कॉन्फ़िगर करने योग्य कर्नेल ऑब्जेक्ट को दर्शाता है, जिसके विरुद्ध वे सहकारी रूप से काम करते हैं। <code>epoll</code> वर्तमान में मॉनिटर किए जा रहे सभी फ़ाइल डिस्क्रिप्टरों पर नज़र रखने के लिए एक लाल-काले पेड़ (आरबी-ट्री) डेटा संरचना का उपयोग करता है।<ref>{{cite web |url=https://idndx.com/the-implementation-of-epoll-1/ |title=एपोल का कार्यान्वयन (1)|website=idndx.com |date=September 2014 |url-status=live}} </ref>
<code>epoll</code> [[FreeBSD]] के Kqueue| के समान है<code>kqueue</code>, इसमें उपयोगकर्ता-स्पेस फ़ंक्शंस का सेट शामिल है, प्रत्येक फ़ाइल डिस्क्रिप्टर तर्क लेता है जो कॉन्फ़िगर करने योग्य कर्नेल ऑब्जेक्ट को दर्शाता है, जिसके विरुद्ध वे सहकारी रूप से काम करते हैं। <code>epoll</code> वर्तमान में मॉनिटर किए जा रहे सभी फ़ाइल डिस्क्रिप्टरों पर नज़र रखने के लिए लाल-काले पेड़ (आरबी-ट्री) डेटा संरचना का उपयोग करता है।<ref>{{cite web |url=https://idndx.com/the-implementation-of-epoll-1/ |title=एपोल का कार्यान्वयन (1)|website=idndx.com |date=September 2014 |url-status=live}} </ref>


== एपीआई ==
== एपीआई ==
<syntaxhighlight lang="c">int epoll_create1(int flags);</syntaxhighlight>
<syntaxhighlight lang="c">int epoll_create1(int flags);</syntaxhighlight>
एक बनाता है <code>epoll</code> ऑब्जेक्ट और उसका फ़ाइल डिस्क्रिप्टर लौटाता है। <code>flags</code> e> पैरामीटर एपोल व्यवहार को संशोधित करने की अनुमति देता है। इसका केवल एक ही वैध मान है, <code>EPOLL_CLOEXEC</code>. <code>epoll_create()</code> का एक पुराना संस्करण है <code>epoll_create1()</code> और इसे Linux कर्नेल संस्करण 2.6.27 और glibc संस्करण 2.9 के रूप में हटा दिया गया है।<ref>{{cite book|last=Love|first=Robert|title=लिनक्स सिस्टम प्रोग्रामिंग|year=2013|publisher=O’Reilly|isbn=978-1-449-33953-1|pages=97, 98|edition=Second}}</ref>
बनाता है <code>epoll</code> ऑब्जेक्ट और उसका फ़ाइल डिस्क्रिप्टर लौटाता है। <code>flags</code> e> पैरामीटर एपोल व्यवहार को संशोधित करने की अनुमति देता है। इसका केवल ही वैध मान है, <code>EPOLL_CLOEXEC</code>. <code>epoll_create()</code> का पुराना संस्करण है <code>epoll_create1()</code> और इसे Linux कर्नेल संस्करण 2.6.27 और glibc संस्करण 2.9 के रूप में हटा दिया गया है।<ref>{{cite book|last=Love|first=Robert|title=लिनक्स सिस्टम प्रोग्रामिंग|year=2013|publisher=O’Reilly|isbn=978-1-449-33953-1|pages=97, 98|edition=Second}}</ref>
<syntaxhighlight lang="c">int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);</syntaxhighlight>
<syntaxhighlight lang="c">int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);</syntaxhighlight>
नियंत्रित करता है (कॉन्फ़िगर करता है) कि कौन से फ़ाइल डिस्क्रिप्टर इस ऑब्जेक्ट द्वारा देखे जाते हैं, और किन घटनाओं के लिए। <code>op</code> जोड़ें, संशोधित करें या हटाएं जा सकते हैं.
नियंत्रित करता है (कॉन्फ़िगर करता है) कि कौन से फ़ाइल डिस्क्रिप्टर इस ऑब्जेक्ट द्वारा देखे जाते हैं, और किन घटनाओं के लिए। <code>op</code> जोड़ें, संशोधित करें या हटाएं जा सकते हैं.
<syntaxhighlight lang="c">int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);</syntaxhighlight>
<syntaxhighlight lang="c">int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);</syntaxhighlight>
के साथ पंजीकृत किसी भी घटना की प्रतीक्षा करता है <code>epoll_ctl</code>, जब तक कि कम से कम एक घटित न हो या समय समाप्त न हो जाए। घटित घटनाओं को लौटाता है <code>events</code>, तक <code>maxevents</code> तुरंत। <code>maxevents</code> की अधिकतम संख्या है <code>epoll_event</code>/फ़ाइल डिस्क्रिप्टर की निगरानी की जाएगी।<ref>{{cite web |url=https://stackoverflow.com/questions/2969425/epoll-wait-maxevents |title=epoll_wait: maxevents |date=Jun 3, 2010|access-date=2023-07-06}}</ref><ref>{{cite web |url=https://man7.org/linux/man-pages/man2/epoll_wait.2.html |title=epoll_wait(2) — Linux manual page |date=2023-03-30|access-date=2023-07-06}}</ref> अधिकांश मामलों में, <code>maxevents</code> के आकार के मान पर सेट किया गया है <code>*events</code> तर्क (<code>struct epoll_event *events</code> सारणी)।
के साथ पंजीकृत किसी भी घटना की प्रतीक्षा करता है <code>epoll_ctl</code>, जब तक कि कम से कम घटित न हो या समय समाप्त न हो जाए। घटित घटनाओं को लौटाता है <code>events</code>, तक <code>maxevents</code> तुरंत। <code>maxevents</code> की अधिकतम संख्या है <code>epoll_event</code>/फ़ाइल डिस्क्रिप्टर की निगरानी की जाएगी।<ref>{{cite web |url=https://stackoverflow.com/questions/2969425/epoll-wait-maxevents |title=epoll_wait: maxevents |date=Jun 3, 2010|access-date=2023-07-06}}</ref><ref>{{cite web |url=https://man7.org/linux/man-pages/man2/epoll_wait.2.html |title=epoll_wait(2) — Linux manual page |date=2023-03-30|access-date=2023-07-06}}</ref> अधिकांश मामलों में, <code>maxevents</code> के आकार के मान पर सेट किया गया है <code>*events</code> तर्क (<code>struct epoll_event *events</code> सारणी)।


==ट्रिगरिंग मोड==
==ट्रिगरिंग मोड==
<code>epoll</code> इंटरप्ट#एज-ट्रिगर|एज-ट्रिगर और इंटरप्ट#लेवल-ट्रिगर|लेवल-ट्रिगर दोनों मोड प्रदान करता है। एज-ट्रिगर मोड में, एक कॉल <code>epoll_wait</code> केवल तभी वापस आएगा जब कोई नया इवेंट इसके साथ जोड़ा जाएगा <code>epoll</code> ऑब्जेक्ट, लेवल-ट्रिगर मोड में रहते हुए, <code>epoll_wait</code> जब तक स्थिति रहेगी वापस आएँगे।
<code>epoll</code> इंटरप्ट#एज-ट्रिगर|एज-ट्रिगर और इंटरप्ट#लेवल-ट्रिगर|लेवल-ट्रिगर दोनों मोड प्रदान करता है। एज-ट्रिगर मोड में, कॉल <code>epoll_wait</code> केवल तभी वापस आएगा जब कोई नया इवेंट इसके साथ जोड़ा जाएगा <code>epoll</code> ऑब्जेक्ट, लेवल-ट्रिगर मोड में रहते हुए, <code>epoll_wait</code> जब तक स्थिति रहेगी वापस आएँगे।


उदाहरण के लिए, यदि कोई अज्ञात पाइप पंजीकृत है <code>epoll</code> डेटा प्राप्त हुआ है, एक कॉल <code>epoll_wait</code> पढ़ने के लिए डेटा की उपस्थिति का संकेत देते हुए वापस आ जाएगा। मान लीजिए, पाठक ने बफ़र से डेटा का केवल एक भाग ही उपभोग किया। लेवल-ट्रिगर मोड में, आगे कॉल करता है <code>epoll_wait</code> तुरंत वापस आ जाएगा, जब तक पाइप के बफ़र में पढ़ने के लिए डेटा मौजूद है। हालाँकि, एज-ट्रिगर मोड में, <code>epoll_wait</code> पाइप में नया डेटा लिखे जाने के बाद ही वापस आएगा।<ref name="epoll(7) - Linux manual page" />
उदाहरण के लिए, यदि कोई अज्ञात पाइप पंजीकृत है <code>epoll</code> डेटा प्राप्त हुआ है, कॉल <code>epoll_wait</code> पढ़ने के लिए डेटा की उपस्थिति का संकेत देते हुए वापस आ जाएगा। मान लीजिए, पाठक ने बफ़र से डेटा का केवल भाग ही उपभोग किया। लेवल-ट्रिगर मोड में, आगे कॉल करता है <code>epoll_wait</code> तुरंत वापस आ जाएगा, जब तक पाइप के बफ़र में पढ़ने के लिए डेटा मौजूद है। हालाँकि, एज-ट्रिगर मोड में, <code>epoll_wait</code> पाइप में नया डेटा लिखे जाने के बाद ही वापस आएगा।<ref name="epoll(7) - Linux manual page" />


== आलोचना ==
== आलोचना ==
[[ब्रायन कैंट्रिल]] ने इस ओर इशारा किया <code>epoll</code> इसमें गलतियाँ थीं जिन्हें टाला जा सकता था, अगर इसने अपने पूर्ववर्तियों से सीखा होता: इनपुट/आउटपुट पूर्णता पोर्ट, [[इवेंट पोर्ट]] (सोलारिस) और केक्यू।<ref>Archived at [https://ghostarchive.org/varchive/youtube/20211205/l6XQUciI-Sc Ghostarchive]{{cbignore}} and the [https://web.archive.org/web/20151202133409/https://www.youtube.com/watch?v=l6XQUciI-Sc Wayback Machine]{{cbignore}}: {{cite web| url = https://www.youtube.com/watch?v=l6XQUciI-Sc&t=57m| title = Ubuntu Slaughters Kittens {{!}} BSD Now 103 | website=[[YouTube]]}}{{cbignore}}</ref> हालाँकि, उनकी आलोचना के एक बड़े हिस्से को संबोधित किया गया था <code>epoll</code>'एस <code>EPOLLONESHOT</code> और <code>EPOLLEXCLUSIVE</code> विकल्प. <code>EPOLLONESHOT</code> फरवरी 2004 में जारी लिनक्स कर्नेल मेनलाइन के संस्करण 2.6.2 में जोड़ा गया था। <code>EPOLLEXCLUSIVE</code> मार्च 2016 में जारी संस्करण 4.5 में जोड़ा गया था।<ref>{{cite web |url=https://idea.popcount.org/2017-02-20-epoll-is-fundamentally-broken-12/ |title=Epoll is fundamentally broken 1/2 |publisher=idea.popcount.org |date=2017-02-20 |access-date=2017-10-06}}</ref>
[[ब्रायन कैंट्रिल]] ने इस ओर इशारा किया <code>epoll</code> इसमें गलतियाँ थीं जिन्हें टाला जा सकता था, अगर इसने अपने पूर्ववर्तियों से सीखा होता: इनपुट/आउटपुट पूर्णता पोर्ट, [[इवेंट पोर्ट]] (सोलारिस) और केक्यू।<ref>Archived at [https://ghostarchive.org/varchive/youtube/20211205/l6XQUciI-Sc Ghostarchive]{{cbignore}} and the [https://web.archive.org/web/20151202133409/https://www.youtube.com/watch?v=l6XQUciI-Sc Wayback Machine]{{cbignore}}: {{cite web| url = https://www.youtube.com/watch?v=l6XQUciI-Sc&t=57m| title = Ubuntu Slaughters Kittens {{!}} BSD Now 103 | website=[[YouTube]]}}{{cbignore}}</ref> हालाँकि, उनकी आलोचना के बड़े हिस्से को संबोधित किया गया था <code>epoll</code>'एस <code>EPOLLONESHOT</code> और <code>EPOLLEXCLUSIVE</code> विकल्प. <code>EPOLLONESHOT</code> फरवरी 2004 में जारी लिनक्स कर्नेल मेनलाइन के संस्करण 2.6.2 में जोड़ा गया था। <code>EPOLLEXCLUSIVE</code> मार्च 2016 में जारी संस्करण 4.5 में जोड़ा गया था।<ref>{{cite web |url=https://idea.popcount.org/2017-02-20-epoll-is-fundamentally-broken-12/ |title=Epoll is fundamentally broken 1/2 |publisher=idea.popcount.org |date=2017-02-20 |access-date=2017-10-06}}</ref>


== यह भी देखें{{Portal|Linux}} ==
== यह भी देखें{{Portal|Linux}} ==

Revision as of 13:21, 16 July 2023

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. 1.0 1.1 "epoll(7) - Linux manual page". Man7.org. 2012-04-17. Retrieved 2014-03-01.
  2. Oleksiy Kovyrin (2006-04-13). "एसिंक्रोनस नेटवर्क प्रोग्रामिंग के लिए epoll() का उपयोग करना". Kovyrin.net. Retrieved 2014-03-01.
  3. "एपोल का कार्यान्वयन (1)". idndx.com. September 2014.{{cite web}}: CS1 maint: url-status (link)
  4. Love, Robert (2013). लिनक्स सिस्टम प्रोग्रामिंग (Second ed.). O’Reilly. pp. 97, 98. ISBN 978-1-449-33953-1.
  5. "epoll_wait: maxevents". Jun 3, 2010. Retrieved 2023-07-06.
  6. "epoll_wait(2) — Linux manual page". 2023-03-30. Retrieved 2023-07-06.
  7. Archived at Ghostarchive and the Wayback Machine: "Ubuntu Slaughters Kittens | BSD Now 103". YouTube.
  8. "Epoll is fundamentally broken 1/2". idea.popcount.org. 2017-02-20. Retrieved 2017-10-06.


बाहरी संबंध