epoll और kqueue के साथ asynchronous IO
Linux पर epoll और BSD या macOS पर kqueue से अनेक connections का विस्तार करें।
epoll और kqueue के साथ asynchronous IO, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
अतुल्यकालिक I/O क्यों?
हर कनेक्शन के लिए एक थ्रेड हजारों या लाखों क्लाइंट तक नहीं बढ़ सकता। अतुल्यकालिक I/O से एक थ्रेड कई सॉकेट संभाल सकता है और उनमें से किसी के पढ़ने या लिखने योग्य होने की प्रतीक्षा कर सकता है।
Linux: epoll
Linux का स्केलेबल इवेंट API। फ़ाइल डिस्क्रिप्टर को epoll इंस्टेंस में जोड़ें और उनमें से किसी पर होने वाली घटनाओं की प्रतीक्षा करें।
#include <sys/epoll.h>
int epfd = epoll_create1(0);
epoll_event ev{};
ev.events = EPOLLIN;
ev.data.fd = sock;
epoll_ctl(epfd, EPOLL_CTL_ADD, sock, &ev);घटनाओं की प्रतीक्षा करना
epoll_wait घटनाएँ उपलब्ध होने तक ब्लॉक करता है, फिर तैयार डिस्क्रिप्टर लौटाता है।
epoll_event events[64];
int n = epoll_wait(epfd, events, 64, -1);
for (int i = 0; i < n; ++i) {
int fd = events[i].data.fd;
handle_io(fd);
}एज-ट्रिगर बनाम लेवल-ट्रिगर
दो मोड होते हैं:
- लेवल-ट्रिगर (डिफ़ॉल्ट) — जब तक कोई स्थिति बनी रहती है, epoll उसकी सूचना देता रहता है
- एज-ट्रिगर (
EPOLLET) — केवल स्थिति बदलने पर सूचना देता है; हर बार सॉकेट को पूरी तरह खाली करना आवश्यक है
macOS और BSD: kqueue
kqueue, epoll के समकक्ष BSD सुविधा है और macOS पर भी उपलब्ध है। अवधारणा समान है, लेकिन API अलग है।
#include <sys/event.h>
int kq = kqueue();
struct kevent ev;
EV_SET(&ev, sock, EVFILT_READ, EV_ADD, 0, 0, nullptr);
kevent(kq, &ev, 1, nullptr, 0, nullptr);Windows: IOCP
Windows I/O Completion Ports (IOCP) का उपयोग करता है — यह epoll/kqueue के तैयारी-आधारित मॉडल के बजाय पूर्णता-आधारित मॉडल है (काम पूरा होने पर सूचना देता है)।
गैर-अवरुद्ध सॉकेट
fcntl(fd, F_SETFL, O_NONBLOCK) से सॉकेट को गैर-अवरुद्ध बनाएँ। अन्यथा पठन और लेखन पूरे इवेंट लूप को रोक सकते हैं।
इवेंट लूप प्रतिरूप
एक ऐसा लूप जो हमेशा चलता रहता है:
- तैयार घटनाओं की प्रतीक्षा करें
- हर घटना के लिए, जब तक वह अवरुद्ध होने वाली न हो, I/O करें
- दोहराएँ
कई क्लाइंट संभालना
एक epoll थ्रेड एक साथ जुड़े दसियों हजार कनेक्शन संभाल सकता है — यह C10K समस्या है। आधुनिक प्रणालियाँ इसे लाखों कनेक्शन तक ले जाती हैं।
सामान्य भूलें
इन बातों का ध्यान रखें:
- गैर-अवरुद्ध मोड सेट करना भूल जाना
- सॉकेट को पूरी तरह खाली किए बिना एज-ट्रिगर का उपयोग करना
- बंद FD को epoll सेट से न हटाना
- हर कनेक्शन के लिए बफ़र लीक होना
उच्च-स्तरीय आवरण
epoll लूप हाथ से लिखना त्रुटियों को आमंत्रित करता है। प्रोडक्शन कोड के लिए libuv, libevent या Boost.Asio का उपयोग करें — ये प्लेटफ़ॉर्म के अंतर छिपाते हैं और परीक्षण किए हुए I/O लूप प्रदान करते हैं।
अतुल्यकालिक बनाम थ्रेड
अतुल्यकालिक I/O अधिक स्केलेबल है, लेकिन लिखना कठिन है। कुछ हजार कनेक्शन वाले सर्वरों के लिए हर कनेक्शन पर एक थ्रेड वाला मॉडल सरल है। चुनाव अपेक्षित लोड के आधार पर करें।
त्वरित जाँच
epoll में एज-ट्रिगर और लेवल-ट्रिगर मोड के बीच क्या अंतर है?
पुनरावलोकन
अतुल्यकालिक I/O एक थ्रेड में कई सॉकेट संभालकर बहुत बड़े स्तर की समवर्तीता तक बढ़ सकता है। Linux में epoll, BSD/macOS में kqueue और Windows में IOCP का उपयोग होता है। सॉकेट को गैर-अवरुद्ध बनाएँ। प्रोडक्शन के लिए इवेंट लूप हाथ से लिखने के बजाय किसी लाइब्रेरी (Asio, libuv, libevent) का उपयोग करें।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “epoll और kqueue के साथ asynchronous IO” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “epoll और kqueue के साथ asynchronous IO” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“epoll और kqueue के साथ asynchronous IO” में मैं क्या सीखूँगा?
Linux पर epoll और BSD या macOS पर kqueue से अनेक connections का विस्तार करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“epoll और kqueue के साथ asynchronous IO” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- C++ में BSD Sockets API
- TCP echo server बनाना
- epoll और kqueue के साथ asynchronous IO
- आधुनिक asynchronous IO के लिए Boost Asio