एसिंक्रोनस प्रोग्रामिंग एक महत्वपूर्ण अवधारणा है जिसके बारे में आपको एक रस्ट डेवलपर के रूप में अवश्य पता होना चाहिए।

पारंपरिक सिंक्रोनस प्रोग्रामिंग मॉडल अक्सर प्रदर्शन बाधाओं का कारण बनते हैं। ऐसा इसलिए है क्योंकि प्रोग्राम अगले कार्य पर जाने से पहले धीमे संचालन के पूरा होने की प्रतीक्षा करता है। इसका परिणाम अक्सर खराब संसाधन उपयोग और सुस्त उपयोगकर्ता अनुभव होता है।

एसिंक्रोनस प्रोग्रामिंग आपको गैर-अवरुद्ध कोड लिखने की अनुमति देता है जो सिस्टम संसाधनों का प्रभावी ढंग से उपयोग करता है। एसिंक्रोनस प्रोग्रामिंग का लाभ उठाकर, आप ऐसे ऐप्स डिज़ाइन कर सकते हैं जो कई कार्य करते हैं। एसिंक्रोनस प्रोग्रामिंग कई नेटवर्क अनुरोधों को संभालने या निष्पादन प्रवाह को अवरुद्ध किए बिना बड़ी मात्रा में डेटा संसाधित करने के लिए उपयोगी है।

जंग में अतुल्यकालिक प्रोग्रामिंग

रस्ट का अतुल्यकालिक प्रोग्रामिंग मॉडल आपको इसकी अनुमति देता है कुशल रस्ट कोड लिखें जो समवर्ती रूप से चलता हो निष्पादन प्रवाह को अवरुद्ध किए बिना। I/O संचालन, नेटवर्क अनुरोध और बाहरी संसाधनों की प्रतीक्षा करने वाले कार्यों से निपटने के दौरान अतुल्यकालिक प्रोग्रामिंग फायदेमंद होती है।

instagram viewer

आप अपने रस्ट ऐप्स में एसिंक्रोनस प्रोग्रामिंग को कई तरीकों से लागू कर सकते हैं। इनमें भाषा सुविधाएँ, लाइब्रेरी और टोकियो रनटाइम शामिल हैं।

भी, जंग का स्वामित्व मॉडल और चैनल और लॉक जैसे समवर्ती प्राइमेटिव सुरक्षित और कुशल समवर्ती प्रोग्रामिंग को सक्षम करते हैं। आप समवर्ती सिस्टम बनाने के लिए एसिंक्रोनस प्रोग्रामिंग के साथ इन सुविधाओं का लाभ उठा सकते हैं जो अच्छी तरह से स्केल करते हैं और कई सीपीयू कोर का उपयोग करते हैं।

रस्ट की अतुल्यकालिक प्रोग्रामिंग अवधारणाएँ

फ्यूचर्स रस्ट में अतुल्यकालिक प्रोग्रामिंग के लिए एक आधार प्रदान करता है। भविष्य एक अतुल्यकालिक गणना का प्रतिनिधित्व करता है जिसे पूरी तरह से निष्पादित नहीं किया गया है।

वायदा आलसी हैं (वे केवल मतदान के समय ही क्रियान्वित होते हैं)। जब आप भविष्य कहते हैं जनमत() विधि, यह जाँचती है कि क्या भविष्य पूरा हो गया है या अतिरिक्त कार्य की आवश्यकता है। यदि भविष्य तैयार नहीं है, तो वह लौट आता है मतदान:: लंबित, यह दर्शाता है कि कार्य को बाद में निष्पादन के लिए निर्धारित किया जाना चाहिए। यदि भविष्य तैयार है, तो वह लौट आता है पोल:: तैयार परिणामी मूल्य के साथ.

रस्ट के मानक टूलचेन में एसिंक्रोनस I/O प्रिमिटिव, फ़ाइल I/O का एक एसिंक संस्करण, नेटवर्किंग और टाइमर शामिल हैं। ये प्रिमिटिव आपको I/O संचालन को अतुल्यकालिक रूप से निष्पादित करने की अनुमति देते हैं। यह I/O कार्यों के पूरा होने की प्रतीक्षा करते समय प्रोग्राम के निष्पादन को अवरुद्ध करने से बचने में मदद करता है।

एसिंक/वेट सिंटैक्स आपको एसिंक्रोनस कोड लिखने की अनुमति देता है जो सिंक्रोनस कोड के समान दिखता है। यह आपके कोड को सहज और बनाए रखने में आसान बनाता है।

अतुल्यकालिक प्रोग्रामिंग के लिए रस्ट का दृष्टिकोण सुरक्षा और प्रदर्शन पर जोर देता है। स्वामित्व और उधार नियम स्मृति सुरक्षा सुनिश्चित करते हैं और सामान्य समवर्ती समस्याओं को रोकते हैं। Async/प्रतीक्षा सिंटैक्स और फ़्यूचर्स एसिंक्रोनस वर्कफ़्लो को व्यक्त करने का एक सहज तरीका प्रदान करते हैं। आप कुशल निष्पादन के लिए कार्यों को प्रबंधित करने के लिए तृतीय-पक्ष रनटाइम का उपयोग कर सकते हैं।

आप अत्यधिक-प्रदर्शनकारी कोड लिखने के लिए इन भाषा सुविधाओं, लाइब्रेरी और रनटाइम को जोड़ सकते हैं। यह अतुल्यकालिक प्रणालियों के निर्माण के लिए एक शक्तिशाली और एर्गोनोमिक ढांचा प्रदान करता है। यह रस्ट को उन परियोजनाओं के लिए एक लोकप्रिय विकल्प बनाता है जिनमें I/O-बाउंड कार्यों के कुशल संचालन और उच्च संगामिति की आवश्यकता होती है।

रस्ट संस्करण 1.39 और बाद के रिलीज़ रस्ट की मानक लाइब्रेरी में अतुल्यकालिक संचालन का समर्थन नहीं करते हैं। इसका उपयोग करने के लिए आपको एक तृतीय-पक्ष क्रेट की आवश्यकता होगी async/इंतजार रस्ट में एसिंक्रोनस ऑपरेशंस को संभालने के लिए सिंटैक्स। आप जैसे तृतीय-पक्ष पैकेज का उपयोग कर सकते हैं टोकियो या async-std एसिंक/प्रतीक्षा सिंटैक्स के साथ काम करने के लिए।

टोकियो के साथ अतुल्यकालिक प्रोग्रामिंग

टोकियो रस्ट के लिए एक मजबूत अतुल्यकालिक रनटाइम है। यह अत्यधिक-प्रदर्शनकारी और स्केलेबल एप्लिकेशन बनाने के लिए कार्यक्षमता प्रदान करता है। आप टोकियो के साथ एसिंक्रोनस प्रोग्रामिंग की शक्ति का उपयोग कर सकते हैं। यह विस्तारशीलता के लिए सुविधाएँ भी प्रदान करता है।

टोकियो के मूल में इसका अतुल्यकालिक कार्य शेड्यूलिंग और निष्पादन मॉडल है। टोकियो आपको एसिंक/वेट सिंटैक्स के साथ एसिंक्रोनस कोड लिखने की अनुमति देता है। यह कुशल सिस्टम संसाधन उपयोग और समवर्ती कार्य निष्पादन को सक्षम बनाता है। टोकियो का इवेंट लूप कार्य शेड्यूलिंग को कुशलतापूर्वक प्रबंधित करता है। यह सीपीयू कोर का इष्टतम उपयोग सुनिश्चित करता है और संदर्भ-स्विचिंग ओवरहेड को कम करता है।

टोकियो के कॉम्बिनेटर कार्य समन्वय और संरचना को आसान बनाते हैं। टोकियो शक्तिशाली कार्य समन्वय और संरचना उपकरण प्रदान करता है। आप शामिल होने के साथ कई कार्यों के पूरा होने की प्रतीक्षा कर सकते हैं, चयन के साथ पहले पूर्ण किए गए कार्य का चयन करें और दौड़ के साथ कार्यों को एक-दूसरे के खिलाफ दौड़ें।

जोड़ें टोकियो आपके लिए टोकरा कार्गो.टीओएमएल फ़ाइल का निर्भरता अनुभाग।

[dependencies]
tokio = { version = "1.9", features = ["full"] }

यहां बताया गया है कि आप टोकियो के साथ अपने रस्ट प्रोग्राम में एसिंक/वेट सिंटैक्स का उपयोग कैसे कर सकते हैं:

use tokio:: time:: sleep;
use std:: time:: Duration;

asyncfnhello_world() {
println!("Hello, ");
sleep(Duration:: from_secs(1)).await;
println!("World!");
}

#[tokio:: main]
asyncfnmain() {
hello_world().await;
}

हैलो वर्ल्ड फ़ंक्शन एसिंक्रोनस है, इसलिए यह इसका उपयोग कर सकता है इंतजार भविष्य का समाधान होने तक इसके निष्पादन को रोकने के लिए कीवर्ड। हैलो वर्ल्ड फ़ंक्शन प्रिंट "नमस्ते, " कंसोल के लिए. अवधि:: से_सेकंड (1) फ़ंक्शन कॉल फ़ंक्शन निष्पादन को एक सेकंड के लिए निलंबित कर देता है। इंतजार कीवर्ड स्लीप फ्यूचर के पूरा होने का इंतजार करता है। अंततः हैलो वर्ल्ड फ़ंक्शन प्रिंट "दुनिया!" कंसोल के लिए.

मुख्य फ़ंक्शन के साथ एक अतुल्यकालिक फ़ंक्शन है #[टोकियो:: मुख्य] गुण। यह टोकियो रनटाइम के लिए प्रवेश बिंदु के रूप में मुख्य फ़ंक्शन को निर्दिष्ट करता है। हेलो_वर्ल्ड().प्रतीक्षा करें hello_world फ़ंक्शन को अतुल्यकालिक रूप से निष्पादित करता है।

टोकियो के साथ कार्यों में देरी

एसिंक्रोनस प्रोग्रामिंग में एक प्रचलित कार्य एक निर्दिष्ट समय सीमा में चलने के लिए देरी या शेड्यूलिंग कार्यों का उपयोग करना है। टोकियो रनटाइम एसिंक्रोनस टाइमर और देरी का उपयोग करने के लिए एक तंत्र प्रदान करता है टोकियो:: समय मापांक।

यहां बताया गया है कि आप टोकियो रनटाइम के साथ किसी ऑपरेशन में देरी कैसे कर सकते हैं:

use std:: time:: Duration;
use tokio:: time:: sleep;

asyncfndelayed_operation() {
println!("Performing delayed operation...");
sleep(Duration:: from_secs(2)).await;
println!("Delayed operation completed.");
}

#[tokio:: main]
asyncfnmain() {
println!("Starting...");
delayed_operation().await;
println!("Finished.");
}

विलंबित_संचालन फ़ंक्शन दो सेकंड की देरी प्रस्तुत करता है नींद तरीका। विलंबित_संचालन फ़ंक्शन अतुल्यकालिक है, इसलिए यह विलंब पूरा होने तक इसके निष्पादन को रोकने के लिए wait का उपयोग कर सकता है।

एसिंक्रोनस प्रोग्राम में त्रुटि प्रबंधन

एसिंक्रोनस रस्ट कोड में त्रुटि प्रबंधन में इसका उपयोग करना शामिल है परिणाम प्रकार और जंग संबंधी त्रुटियों को संभालना साथ ? ऑपरेटर।

use tokio:: fs:: File;
use tokio:: io;
use tokio:: io::{AsyncReadExt};

asyncfnread_file_contents() -> io::Result<String> {
letmut file = File:: open("file.txt").await?;
letmut contents = String::new();
file.read_to_string(&mut contents).await?;
Ok(contents)
}

asyncfnprocess_file() -> io::Result {
let contents = read_file_contents().await?;
// Process the file contents
Ok(())
}

#[tokio:: main]
asyncfnmain() {
match process_file().await {
Ok(()) => println!("File processed successfully."),
Err(err) => eprintln!("Error processing file: {}", err),
}
}

read_file_contents फ़ंक्शन एक लौटाता है io:: परिणाम यह I/O त्रुटि की संभावना को दर्शाता है। का उपयोग करके ? प्रत्येक एसिंक्रोनस ऑपरेशन के बाद ऑपरेटर, टोकियो रनटाइम कॉल स्टैक में त्रुटियों को प्रसारित करेगा।

मुख्य फ़ंक्शन परिणाम को a के साथ संभालता है मिलान वह कथन जो ऑपरेशन के परिणाम के आधार पर एक टेक्स्ट प्रिंट करता है।

रिक्वेस्ट HTTP संचालन के लिए एसिंक्रोनस प्रोग्रामिंग का उपयोग करता है

रिक्वेस्ट सहित कई लोकप्रिय क्रेट, अतुल्यकालिक HTTP संचालन प्रदान करने के लिए टोकियो का उपयोग करते हैं।

आप अन्य कार्यों को अवरुद्ध किए बिना कई HTTP अनुरोध करने के लिए Reqwest के साथ टोकियो का उपयोग कर सकते हैं। टोकियो आपको हजारों समवर्ती कनेक्शनों को संभालने और संसाधनों को कुशलतापूर्वक प्रबंधित करने में मदद कर सकता है।