Rust में एसिंक्रोनस प्रोग्रामिंग: शुरुआती लोगों के लिए पूर्ण गाइड

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

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

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

Rust में एसिंक्रोनस प्रोग्रामिंग: शुरुआती लोगों के लिए पूर्ण गाइड

\n\n

एसिंक्रोनस प्रोग्रामिंग एक प्रतिमान है जो मुख्य निष्पादन थ्रेड को ब्लॉक किए बिना एक साथ कई कार्यों को निष्पादित करने की अनुमति देता है। Rust में, एसिंक्रोनसिटी को कीवर्ड async और .await के साथ-साथ Tokio जैसे शक्तिशाली runtime के माध्यम से कार्यान्वित किया जाता है। यह गाइड आपको Rust में एसिंक्रोनस प्रोग्रामिंग की मूल बातें समझने में मदद करेगा, भले ही आप अभी अपनी यात्रा शुरू कर रहे हों।

\n\n

एसिंक्रोनस प्रोग्रामिंग क्या है और इसकी आवश्यकता क्यों है?

\n\n

पारंपरिक सिंक्रोनस कोड में, प्रत्येक ऑपरेशन क्रमिक रूप से निष्पादित होता है। यदि कोई प्रोग्राम HTTP अनुरोध करता है, तो वह कुछ भी किए बिना प्रतिक्रिया की प्रतीक्षा करता है। एसिंक्रोनस दृष्टिकोण में, प्रोग्राम अनुरोध शुरू कर सकता है और प्रतिक्रिया की प्रतीक्षा करते हुए किसी अन्य कार्य पर स्विच कर सकता है। यह विशेष रूप से महत्वपूर्ण है:

\n\n
    \n
  • नेटवर्क अनुप्रयोगों के लिए — वेब सर्वर, API क्लाइंट, चैट।
  • \n
  • फ़ाइलों के साथ काम करने के लिए — बड़ी मात्रा में डेटा पढ़ना/लिखना।
  • \n
  • उपयोगकर्ता इंटरफ़ेस के लिए — ताकि बैकग्राउंड ऑपरेशन के दौरान इंटरफ़ेस "फ़्रीज़" न हो।
  • \n
\n\n

Rust शून्य-लागत अमूर्तता प्रदान करता है: एसिंक्रोनस कोड कुशल मशीन निर्देशों में संकलित होता है। अन्य भाषाओं के विपरीत जहां एसिंक्रोनसिटी "ओवरहेड" हो सकती है, Rust तेज़ और सुरक्षित एसिंक्रोनस प्रोग्राम लिखने की अनुमति देता है।

\n\n

Rust में async/await की मूल बातें

\n\n

कीवर्ड async और .await Rust में एसिंक्रोनस प्रोग्रामिंग की नींव हैं। आइए एक सरल उदाहरण के साथ इन्हें समझते हैं।

\n\n

1. एसिंक्रोनस फ़ंक्शन बनाना

\n\n

कोई भी फ़ंक्शन एसिंक्रोनस बन सकता है यदि उसके सामने कीवर्ड async जोड़ा जाए। ऐसा फ़ंक्शन Future लौटाता है — एक मान जो अभी तैयार नहीं है, लेकिन भविष्य में तैयार होगा।

\n\n
// सिंक्रोनस फ़ंक्शन\nfn say_hello_sync() -> String {\n    String::from("Hello, World!")\n}\n\n// एसिंक्रोनस फ़ंक्शन\nasync fn say_hello_async() -> String {\n    String::from("Hello, World!")\n}
\n\n

ध्यान दें: यदि आप केवल say_hello_async() को कॉल करते हैं, तो कोड निष्पादित नहीं होगा। आपको एक Future ऑब्जेक्ट मिलेगा, जिसे runtime का उपयोग करके "चलाना" होगा।

\n\n

2. .await के साथ परिणाम की प्रतीक्षा करना

\n\n

Future से मान प्राप्त करने के लिए, .await का उपयोग करें। यह कीवर्ड कंपाइलर को बताता है: "इस फ़ंक्शन के निष्पादन को तब तक रोकें जब तक Future तैयार न हो जाए, और अन्य कार्यों को काम करने दें।"

\n\n
async fn process() {\n    let result = say_hello_async().await;\n    println!("{}", result);\n}
\n\n

3. एसिंक्रोनस ब्लॉक

\n\n

आप "मौके पर" एसिंक्रोनस कोड ब्लॉक भी बना सकते हैं:

\n\n
let future = async {\n    let x = 10;\n    let y = 20;\n    x + y\n};\n\nlet result = future.await; // परिणाम: 30
\n\n

Runtime: Tokio — एसिंक्रोनस Rust का हृदय

\n\n

अकेले async और .await कोड को नहीं चलाते हैं। एक runtime की आवश्यकता होती है — एक निष्पादन वातावरण जो कार्यों और शेड्यूलर का प्रबंधन करता है। इसके लिए सबसे लोकप्रिय लाइब्रेरी Tokio है।

\n\n

Tokio स्थापित करना

\n\n

Cargo.toml में जोड़ें:

\n\n
[dependencies]\ntokio = { version = "1.0", features = ["full"] }
\n\n

पहला एसिंक्रोनस प्रोजेक्ट

\n\n

एसिंक्रोनस कोड चलाने के लिए, मैक्रो #[tokio::main] का उपयोग करें। यह स्वचालित रूप से runtime बनाता है और आपके फ़ंक्शन को चलाता है।

\n\n
use tokio;\n\n#[tokio::main]\nasync fn main() {\n    println!("एसिंक्रोनस कोड शुरू कर रहे हैं!");\n    let result = say_hello_async().await;\n    println!("परिणाम: {}", result);\n}\n\nasync fn say_hello_async() -> String {\n    // लंबी ऑपरेशन का अनुकरण\n    tokio::time::sleep(tokio::time::Duration::from_secs(2)).await;\n    String::from("Hello, Async World!")                

ब्लॉग

पुस्तक अनुशंसाएँ