Ο ασύγχρονος προγραμματισμός είναι μια σημαντική έννοια που πρέπει να γνωρίζετε ως προγραμματιστής της Rust.
Τα παραδοσιακά μοντέλα σύγχρονου προγραμματισμού συχνά οδηγούν σε συμφόρηση απόδοσης. Αυτό συμβαίνει επειδή το πρόγραμμα περιμένει να ολοκληρωθούν αργές λειτουργίες πριν προχωρήσει στην επόμενη εργασία. Αυτό συχνά οδηγεί σε κακή χρήση πόρων και υποτονική εμπειρία χρήστη.
Ο ασύγχρονος προγραμματισμός σάς επιτρέπει να γράψετε κώδικα χωρίς αποκλεισμό που χρησιμοποιεί αποτελεσματικά τους πόρους του συστήματος. Αξιοποιώντας τον ασύγχρονο προγραμματισμό, μπορείτε να σχεδιάσετε εφαρμογές που εκτελούν πολλαπλές εργασίες. Ο ασύγχρονος προγραμματισμός είναι χρήσιμος για το χειρισμό πολλών αιτημάτων δικτύου ή την επεξεργασία μεγάλων ποσοτήτων δεδομένων χωρίς να εμποδίζεται η ροή εκτέλεσης.
Ασύγχρονος Προγραμματισμός σε Rust
Το μοντέλο ασύγχρονου προγραμματισμού της Rust σάς επιτρέπει γράψτε αποτελεσματικό κώδικα Rust που εκτελείται ταυτόχρονα χωρίς να εμποδίζεται η ροή εκτέλεσης. Ο ασύγχρονος προγραμματισμός είναι επωφελής όταν αντιμετωπίζετε λειτουργίες I/O, αιτήματα δικτύου και εργασίες που περιλαμβάνουν αναμονή για εξωτερικούς πόρους.
Μπορείτε να εφαρμόσετε ασύγχρονο προγραμματισμό στις εφαρμογές Rust με διάφορους τρόπους. Αυτά περιλαμβάνουν χαρακτηριστικά γλώσσας, βιβλιοθήκες και το χρόνο εκτέλεσης του Tokio.
Επίσης, Το μοντέλο ιδιοκτησίας του Rust και τα πρωτόγονα ταυτόχρονης χρήσης, όπως κανάλια και κλειδαριές, επιτρέπουν τον ασφαλή και αποτελεσματικό ταυτόχρονο προγραμματισμό. Μπορείτε να αξιοποιήσετε αυτές τις δυνατότητες με ασύγχρονο προγραμματισμό για να δημιουργήσετε ταυτόχρονα συστήματα που κλιμακώνονται καλά και χρησιμοποιούν πολλαπλούς πυρήνες CPU.
Οι έννοιες του ασύγχρονου προγραμματισμού της Rust
Τα Futures παρέχουν τη βάση για ασύγχρονο προγραμματισμό στο Rust. Ένα μέλλον αντιπροσωπεύει έναν ασύγχρονο υπολογισμό που δεν έχει εκτελεστεί πλήρως.
Τα συμβόλαια μελλοντικής εκπλήρωσης είναι τεμπέληδες (εκτελούνται μόνο όταν βρίσκονται σε ψηφοφορία). Όταν καλείς ένα μέλλον ψηφοφορία() μέθοδο, ελέγχει εάν το μέλλον έχει ολοκληρωθεί ή χρειάζεται πρόσθετη εργασία. Αν το μέλλον δεν είναι έτοιμο, επιστρέφει Δημοσκόπηση:: Εκκρεμεί, υποδεικνύοντας ότι η εργασία πρέπει να προγραμματιστεί για μεταγενέστερη εκτέλεση. Αν το μέλλον είναι έτοιμο, επιστρέφει Δημοσκόπηση:: Έτοιμος με την τιμή που προκύπτει.
Η τυπική αλυσίδα εργαλείων της Rust περιλαμβάνει ασύγχρονα I/O primitives, μια ασύγχρονη έκδοση του αρχείου I/O, δικτύωση και χρονόμετρα. Αυτά τα primitives σας επιτρέπουν να εκτελείτε λειτουργίες I/O ασύγχρονα. Αυτό βοηθά στην αποφυγή αποκλεισμού της εκτέλεσης ενός προγράμματος ενώ περιμένει να ολοκληρωθούν οι εργασίες I/O.
Η σύνταξη async/wait σας επιτρέπει να γράψετε ασύγχρονο κώδικα που μοιάζει με σύγχρονο κώδικα. Αυτό κάνει τον κώδικά σας διαισθητικό και εύκολο στη συντήρηση.
Η προσέγγιση της Rust στον ασύγχρονο προγραμματισμό δίνει έμφαση στην ασφάλεια και την απόδοση. Οι κανόνες ιδιοκτησίας και δανεισμού διασφαλίζουν την ασφάλεια της μνήμης και αποτρέπουν κοινά ζητήματα ταυτόχρονης χρήσης. Η σύνταξη Async/wait και τα futures παρέχουν έναν διαισθητικό τρόπο έκφρασης ασύγχρονων ροών εργασίας. Μπορείτε να χρησιμοποιήσετε έναν χρόνο εκτέλεσης τρίτου κατασκευαστή για να διαχειριστείτε εργασίες για αποτελεσματική εκτέλεση.
Μπορείτε να συνδυάσετε αυτές τις δυνατότητες γλώσσας, βιβλιοθήκες και χρόνο εκτέλεσης για να γράψετε κώδικα υψηλής απόδοσης. Παρέχει ένα ισχυρό και εργονομικό πλαίσιο για την κατασκευή ασύγχρονων συστημάτων. Αυτό καθιστά το Rust μια δημοφιλή επιλογή για έργα που απαιτούν αποτελεσματικό χειρισμό εργασιών που συνδέονται με I/O και υψηλή συγχρονικότητα.
Η έκδοση Rust 1.39 και οι νεότερες εκδόσεις δεν υποστηρίζουν ασύγχρονες λειτουργίες στην τυπική βιβλιοθήκη του Rust. Θα χρειαστείτε ένα κιβώτιο τρίτου κατασκευαστή για να το χρησιμοποιήσετε ασυγχρονισμός/αναμένω σύνταξη για το χειρισμό ασύγχρονων λειτουργιών στο Rust. Μπορείτε να χρησιμοποιήσετε πακέτα τρίτων όπως π.χ Τόκιο ή async-std για να εργαστείτε με τη σύνταξη async/wait.
Ασύγχρονος Προγραμματισμός με Tokio
Το Tokio είναι ένας ισχυρός ασύγχρονος χρόνος εκτέλεσης για το Rust. Παρέχει λειτουργικότητα για τη δημιουργία εφαρμογών υψηλής απόδοσης και κλιμάκωσης. Μπορείτε να αξιοποιήσετε τη δύναμη του ασύγχρονου προγραμματισμού με το Tokio. Παρέχει επίσης δυνατότητες επεκτασιμότητας.
Στον πυρήνα του Tokio βρίσκεται το μοντέλο ασύγχρονου προγραμματισμού και εκτέλεσης εργασιών. Το Tokio σάς επιτρέπει να γράψετε ασύγχρονο κώδικα με τη σύνταξη async/wait. Αυτό επιτρέπει την αποτελεσματική χρήση των πόρων του συστήματος και την ταυτόχρονη εκτέλεση εργασιών. Ο βρόχος συμβάντων του Tokio διαχειρίζεται αποτελεσματικά τον προγραμματισμό εργασιών. Αυτό διασφαλίζει τη βέλτιστη χρήση των πυρήνων της CPU και ελαχιστοποιεί την επιβάρυνση της εναλλαγής περιβάλλοντος.
Οι συνδυαστές του Tokio διευκολύνουν τον συντονισμό και τη σύνθεση εργασιών. Το Tokio παρέχει ισχυρά εργαλεία συντονισμού και σύνθεσης εργασιών. Μπορείτε να περιμένετε να ολοκληρωθούν πολλές εργασίες με την ένωση, να επιλέξετε την πρώτη ολοκληρωμένη εργασία με επιλεγμένη και να αγωνιστείτε μεταξύ τους με αγώνα.
Πρόσθεσε το Τόκιο κλουβί σε σας Cargo.toml ενότητα εξαρτήσεων του αρχείου.
[dependencies]
tokio = { version = "1.9", features = ["full"] }
Δείτε πώς μπορείτε να χρησιμοποιήσετε τη σύνταξη async/wait στα προγράμματα Rust με το Tokio:
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;
}
ο Γειά σου Κόσμε η λειτουργία είναι ασύγχρονη, επομένως μπορεί να χρησιμοποιήσει το αναμένω λέξη-κλειδί για παύση της εκτέλεσής της έως ότου επιλυθεί ένα μέλλον. ο Γειά σου Κόσμε εκτυπώσεις λειτουργιών "Γειά σου, " στην κονσόλα. ο Διάρκεια:: from_secs (1) Η κλήση συνάρτησης αναστέλλει την εκτέλεση της συνάρτησης για ένα δευτερόλεπτο. ο αναμένω λέξη-κλειδί περιμένει να ολοκληρωθεί το μέλλον του ύπνου. Τέλος, το Γειά σου Κόσμε εκτυπώσεις λειτουργιών "Κόσμος!" στην κονσόλα.
ο κύριος η συνάρτηση είναι μια ασύγχρονη συνάρτηση με το #[tokio:: κύρια] Χαρακτηριστικό. Καθορίζει την κύρια λειτουργία ως σημείο εισόδου για το χρόνο εκτέλεσης του Tokio. ο hello_world().wait εκτελεί τη συνάρτηση hello_world ασύγχρονα.
Καθυστέρηση εργασιών με το Τόκιο
Μια διαδεδομένη εργασία στον ασύγχρονο προγραμματισμό είναι η χρήση καθυστερήσεων ή προγραμματισμού εργασιών για εκτέλεση σε ένα καθορισμένο χρονικό εύρος. Ο χρόνος εκτέλεσης tokio παρέχει έναν μηχανισμό για τη χρήση ασύγχρονων χρονομετρητών και καθυστερήσεων μέσω του tokio:: ώρα μονάδα μέτρησης.
Δείτε πώς μπορείτε να καθυστερήσετε μια λειτουργία με το χρόνο εκτέλεσης του Tokio:
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.");
}
ο καθυστερημένη_λειτουργία η λειτουργία εισάγει μια καθυστέρηση δύο δευτερολέπτων με το ύπνος μέθοδος. ο καθυστερημένη_λειτουργία Η λειτουργία είναι ασύγχρονη, επομένως μπορεί να χρησιμοποιήσει την αναμονή για να σταματήσει την εκτέλεσή της μέχρι να ολοκληρωθεί η καθυστέρηση.
Χειρισμός σφαλμάτων σε ασύγχρονα προγράμματα
Ο χειρισμός σφαλμάτων στον ασύγχρονο κώδικα Rust περιλαμβάνει τη χρήση του Αποτέλεσμα τύπος και χειρισμός σφαλμάτων σκουριάς με την ? χειριστής.
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 η συνάρτηση επιστρέφει an io:: Αποτέλεσμα που αντιπροσωπεύει την πιθανότητα σφάλματος I/O. Με τη χρήση του ? τελεστής μετά από κάθε ασύγχρονη λειτουργία, ο χρόνος εκτέλεσης του Tokio θα μεταδίδει σφάλματα στη στοίβα κλήσεων.
ο κύριος η συνάρτηση χειρίζεται το αποτέλεσμα με a αγώνας δήλωση που εκτυπώνει ένα κείμενο με βάση το αποτέλεσμα της πράξης.
Το Reqwest χρησιμοποιεί ασύγχρονο προγραμματισμό για λειτουργίες HTTP
Πολλά δημοφιλή κιβώτια, συμπεριλαμβανομένου του Reqwest, χρησιμοποιούν το Tokio για να παρέχουν ασύγχρονες λειτουργίες HTTP.
Μπορείτε να χρησιμοποιήσετε το Tokio με το Reqwest για να κάνετε πολλά αιτήματα HTTP χωρίς να αποκλείσετε άλλες εργασίες. Το Tokio μπορεί να σας βοηθήσει να χειριστείτε χιλιάδες ταυτόχρονες συνδέσεις και να διαχειριστείτε αποτελεσματικά τους πόρους.