Asünkroonne programmeerimine on oluline kontseptsioon, mida peate Rusti arendajana teadma.

Traditsioonilised sünkroonse programmeerimise mudelid põhjustavad sageli jõudluse kitsaskohti. Selle põhjuseks on asjaolu, et programm ootab enne järgmise toimingu juurde liikumist aeglaste toimingute lõpetamist. Selle tagajärjeks on sageli kehv ressursikasutus ja loid kasutuskogemus.

Asünkroonne programmeerimine võimaldab teil kirjutada mitteblokeerivat koodi, mis kasutab tõhusalt süsteemiressursse. Asünkroonse programmeerimise abil saate kujundada rakendusi, mis täidavad mitut ülesannet. Asünkroonne programmeerimine on mugav mitme võrgupäringu käsitlemiseks või suurte andmemahtude töötlemiseks ilma täitmisvoogu blokeerimata.

Asünkroonne programmeerimine roostes

Rusti asünkroonne programmeerimismudel võimaldab teil seda teha kirjutage tõhus Rust kood, mis töötab samaaegselt täitmisvoogu blokeerimata. Asünkroonne programmeerimine on kasulik sisend-väljundoperatsioonide, võrgupäringute ja väliste ressursside ootamisega seotud ülesannetega tegelemisel.

Saate Rusti rakendustes asünkroonset programmeerimist rakendada mitmel viisil. Nende hulka kuuluvad keelefunktsioonid, teegid ja Tokio käitusaeg.

Samuti Rooste omandimudel ja samaaegsuse primitiivid, nagu kanalid ja lukud, võimaldavad ohutut ja tõhusat samaaegset programmeerimist. Saate neid funktsioone asünkroonse programmeerimisega kasutada, et luua samaaegseid süsteeme, mis skaleeruvad hästi ja kasutavad mitut protsessori tuuma.

Rusti asünkroonse programmeerimise kontseptsioonid

Futuurid loovad aluse asünkroonseks programmeerimiseks Rustis. Tulevik tähistab asünkroonset arvutust, mida pole täielikult teostatud.

Futuurid on laisad (neid hukatakse ainult küsitlemisel). Kui sa kutsud tulevikku küsitlus () meetodil, kontrollib see, kas tulevik on valmis või vajab lisatööd. Kui tulevik pole valmis, tuleb see tagasi Küsitlus:: Ootel, mis näitab, et ülesanne tuleks ajastada hilisemaks täitmiseks. Kui tulevik on valmis, tuleb see tagasi Küsitlus:: Valmis saadud väärtusega.

Rusti standardne tööriistakett sisaldab asünkroonseid I/O primitiive, faili I/O asünkroonversiooni, võrku ja taimereid. Need primitiivid võimaldavad sooritada I/O toiminguid asünkroonselt. See aitab vältida programmi täitmise blokeerimist, kui oodatakse I/O-ülesannete lõpetamist.

Asünkroonse/ootamise süntaks võimaldab kirjutada asünkroonset koodi, mis näeb välja sarnane sünkroonse koodiga. See muudab teie koodi intuitiivseks ja hõlpsasti hooldatavaks.

Rusti lähenemine asünkroonsele programmeerimisele rõhutab ohutust ja jõudlust. Omandi- ja laenureeglid tagavad mälu ohutuse ja hoiavad ära tavalised samaaegsusprobleemid. Asünkroonse/ootuse süntaks ja futuurid pakuvad intuitiivset viisi asünkroonsete töövoogude väljendamiseks. Tõhusaks täitmiseks saate ülesannete haldamiseks kasutada kolmanda osapoole käitusaega.

Suure jõudlusega koodi kirjutamiseks saate neid keelefunktsioone, teeke ja käitusaega kombineerida. See annab võimsa ja ergonoomilise raamistiku asünkroonsete süsteemide ehitamiseks. See muudab Rusti populaarseks valikuks projektide jaoks, mis nõuavad tõhusat I/O-ga seotud ülesannete käsitlemist ja suurt samaaegsust.

Rusti versioon 1.39 ja uuemad väljaanded ei toeta Rusti standardteegi asünkroonseid toiminguid. Selle kasutamiseks vajate kolmanda osapoole kasti asünkr/ootama süntaks asünkroonsete toimingute käsitlemiseks Rustis. Võite kasutada kolmanda osapoole pakette nagu Tokio või async-std asünkrooni/ootama süntaksiga töötamiseks.

Asünkroonne programmeerimine Tokioga

Tokio on Rusti jaoks tugev asünkroonne käitusaeg. See pakub funktsioone suure jõudlusega ja skaleeritavate rakenduste loomiseks. Tokioga saate kasutada asünkroonse programmeerimise võimsust. See pakub ka laiendatavuse funktsioone.

Tokio keskmes on selle asünkroonne ülesannete ajastamise ja täitmise mudel. Tokio võimaldab kirjutada asünkroonset koodi asünkroonse/ootama süntaksiga. See võimaldab tõhusat süsteemiressursside kasutamist ja samaaegset ülesannete täitmist. Tokio sündmuste tsükkel haldab tõhusalt ülesannete ajastamist. See tagab protsessori tuumade optimaalse kasutamise ja minimeerib konteksti vahetamise üldkulusid.

Tokio kombinaatorid muudavad ülesannete koordineerimise ja koostamise lihtsaks. Tokio pakub võimsaid ülesannete koordineerimise ja koostamise tööriistu. Liitumisega saate oodata mitme ülesande täitmist, valida valikuga esimese lõpetatud ülesande ja võistelda üksteisega võidujooksuga.

Lisage tokio kasti sinu juurde Cargo.toml faili sõltuvuste jaotisest.

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

Siin on, kuidas saate Tokioga oma Rusti programmides asünkrooni/ootamise süntaksit kasutada:

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;
}

The Tere, Maailm funktsioon on asünkroonne, seega saab seda kasutada ootama märksõna, et peatada selle täitmine, kuni tulevik on lahendatud. The Tere, Maailm funktsiooniprindid "Tere, " konsooli juurde. The Kestus:: from_sec (1) funktsiooni kutse peatab funktsiooni täitmise sekundiks. The ootama märksõna ootab unetuleviku lõpuleviimist. Lõpuks, Tere, Maailm funktsiooniprindid "Maailm!" konsooli juurde.

The peamine funktsioon on asünkroonne funktsioon funktsiooniga #[tokio:: main] atribuut. See määrab peamise funktsiooni Tokio käitusaja sisenemispunktiks. The hello_world().oota täidab funktsiooni hello_world asünkroonselt.

Ülesannete edasilükkamine Tokioga

Levinud ülesanne asünkroonses programmeerimises on viivituste või ülesannete ajastamise kasutamine teatud ajavahemikus töötamiseks. Tokio käitusaeg pakub mehhanismi asünkroonsete taimerite ja viivituste kasutamiseks tokio:: aeg moodul.

Siin on, kuidas saate Tokio käitusajaga operatsiooni edasi lükata:

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.");
}

The viivitatud_operatsioon funktsioon lisab kahesekundilise viivituse nupuga magama meetod. The viivitatud_operatsioon funktsioon on asünkroonne, nii et see saab kasutada ootamist, et peatada selle täitmine, kuni viivitus on lõppenud.

Vigade käsitlemine asünkroonsetes programmides

Asünkroonse Rust-koodi vigade käsitlemine hõlmab koodi kasutamist Tulemus tüüp ja Roostevigade käsitlemine koos ? operaator.

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),
}
}

The loe_faili_sisu funktsioon tagastab an io:: Tulemus mis tähistab I/O vea võimalust. Kasutades ? operaator pärast iga asünkroonset toimingut, levitab Tokio käitusaeg vead kõnepinus üles.

The peamine funktsioon käsitleb tulemust a-ga vaste avaldus, mis prindib teksti toimingu tulemuse põhjal.

Reqwest kasutab HTTP-toimingute jaoks asünkroonset programmeerimist

Paljud populaarsed kastid, sealhulgas Reqwest, kasutavad Tokiot asünkroonsete HTTP-toimingute pakkumiseks.

Saate kasutada Tokiot koos Reqwestiga mitme HTTP-päringu tegemiseks ilma teisi ülesandeid blokeerimata. Tokio aitab teil hallata tuhandeid samaaegseid ühendusi ja tõhusalt hallata ressursse.