libuv C++: पूरी गाइड उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

libuv C++: एसिंक्रोनस इनपुट-आउटपुट की पूरी गाइड

PythonLib के शैक्षिक पोर्टल पर आपका स्वागत है। यह लेख libuv लाइब्रेरी के साथ C++ में एसिंक्रोनस प्रोग्रामिंग सीखने के लिए एक संपूर्ण गाइड है। यह उन डेवलपर्स के लिए है जो सबसे भरोसेमंद और परफॉरमेंट लाइब्रेरी का उपयोग करके एसिंक्रोनस प्रोग्रामिंग में महारत हासिल करना चाहते हैं।

1. libuv क्या है और इसकी आवश्यकता क्यों है?

libuv एक क्रॉस-प्लेटफॉर्म C लाइब्रेरी है जो एसिंक्रोनस इनपुट-आउटपुट (I/O) के लिए डिज़ाइन की गई है। इसे मूल रूप से Node.js प्रोजेक्ट के लिए विकसित किया गया था ताकि event loop (इवेंट लूप) और नॉन-ब्लॉकिंग I/O ऑपरेशंस को विभिन्न ऑपरेटिंग सिस्टम पर एब्सट्रैक्ट किया जा सके। आज libuv का उपयोग न केवल Node.js में, बल्कि Julia, Luvit, Pyuv (Python) और कई अन्य प्रोजेक्ट्स में भी किया जाता है।

इसकी आवश्यकता क्यों है? आधुनिक प्रोग्रामिंग में अक्सर एक साथ कई कार्य करने होते हैं, बिना मुख्य थ्रेड को ब्लॉक किए। पारंपरिक तरीके जैसे मल्टीथ्रेडिंग, लागू करने में जटिल होते हैं और त्रुटियों (डेटा रेस, डेडलॉक) से ग्रस्त होते हैं। libuv एक सुंदर विकल्प प्रदान करता है — एक एसिंक्रोनस मॉडल जो इवेंट लूप पर आधारित है। आप विभिन्न इवेंट्स (सॉकेट से पढ़ना, टाइमर, सिग्नल) के लिए हैंडलर (कॉलबैक) रजिस्टर करते हैं, और libuv स्वचालित रूप से उन्हें कॉल करता है जब इवेंट होता है, बिना अन्य कार्यों के निष्पादन को ब्लॉक किए।

C++ डेवलपर्स के लिए, libuv हाई-परफॉरमेंस नेटवर्क सर्वर, क्लाइंट, फ़ाइल ऑपरेशंस टूल्स और सिस्टम यूटिलिटीज बनाने का एक शक्तिशाली टूल प्रदान करता है। यह epoll (Linux), kqueue (macOS), IOCP (Windows) और अन्य मैकेनिज़्म के साथ सभी लो-लेवल काम को संभालता है, एक सरल, एकीकृत API प्रदान करता है। इससे आप ऐसा कोड लिख सकते हैं जो बिना किसी बदलाव के किसी भी प्लेटफॉर्म पर काम करेगा।

2. libuv की स्थापना (इंस्टॉलेशन)

libuv की स्थापना आपके ऑपरेटिंग सिस्टम और पैकेज मैनेजर पर निर्भर करती है। चूंकि libuv एक C लाइब्रेरी है, इसे pip, npm या cargo के माध्यम से स्थापित नहीं किया जाता है। यहाँ मुख्य स्थापना विधियाँ हैं:

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install libuv1-dev

macOS (Homebrew)

brew install libuv

Windows (vcpkg)

vcpkg install libuv

स्रोत कोड से बिल्ड करना (सभी प्लेटफॉर्म के लिए)

git clone https://github.com/libuv/libuv.git
cd libuv
mkdir build && cd build
cmake .. -DBUILD_TESTING=OFF
make -j$(nproc)
sudo make install

स्थापना के बाद, आप अपने प्रोग्राम को लाइब्रेरी से लिंक करके कंपाइल कर सकते हैं:

g++ -std=c++11 -o my_program my_program.cpp -luv

3. त्वरित शुरुआत: न्यूनतम कार्यशील उदाहरण

चलिए एक सरल प्रोग्राम लिखते हैं जो एक इवेंट लूप बनाता है और एक टाइमर चलाता है जो 1 सेकंड के बाद एक बार फायर होता है।

#include <uv.h>
#include <cstdio>

// टाइमर के लिए कॉलबैक
void on_timer(uv_timer_t* handle) {
    printf("टाइमर फायर हुआ!\n");
    // इवेंट लूप को रोकें
    uv_stop(handle->loop);
}

int main() {
    // 1. इवेंट लूप बनाएं
    uv_loop_t* loop = uv_default_loop();

    // 2. टाइमर बनाएं और इनिशियलाइज़ करें
    uv_timer_t timer;
    uv_timer_init(loop, &timer);

    // 3. टाइमर शुरू करें: 1000 मिलीसेकंड के बाद एक बार फायर होगा
    uv_timer_start(&timer, on_timer, 1000, 0);

    // 4. इवेंट लूप चलाएं
    printf("इवेंट लूप शुरू हो रहा है...\n");
    uv_run(loop, UV_RUN_DEFAULT);

    // 5. संसाधनों को साफ करें
    uv_loop_close(loop);

    return 0;
}

व्याख्या:

  1. uv_default_loop() — डिफ़ॉल्ट ग्लोबल इवेंट लूप प्राप्त करता है।
  2. uv_timer_init() — टाइमर स्ट्रक्चर को इनिशियलाइज़ करता है।
  3. uv_timer_start() — टाइमर शुरू करता है। पहला आर्गुमेंट टाइमर हैंडल है, दूसरा कॉलबैक फंक्शन, तीसरा टाइमआउट (मिलीसेकंड में), और चौथा रिपीट इंटरवल (0 का मतलब एक बार)।
  4. uv_run() — इवेंट लूप चलाता है। UV_RUN_DEFAULT तब तक चलता है जब तक कोई एक्टिव हैंडल न हो।
  5. uv_stop() — लूप को रोकता है।
  6. uv_loop_close() — लूप से जुड़े संसाधनों को मुक्त करता है।

अनुशंसाएँ