Asynkroninen ohjelmointi on tärkeä käsite, joka sinun on oltava tietoinen Rust-kehittäjänä.

Perinteiset synkroniset ohjelmointimallit johtavat usein suorituskyvyn pullonkauloihin. Tämä johtuu siitä, että ohjelma odottaa hitaiden toimintojen valmistumista ennen kuin siirtyy seuraavaan tehtävään. Tämä johtaa usein huonoon resurssien käyttöön ja hitaaseen käyttökokemukseen.

Asynkronisen ohjelmoinnin avulla voit kirjoittaa estävää koodia, joka käyttää järjestelmäresursseja tehokkaasti. Hyödyntämällä asynkronista ohjelmointia voit suunnitella sovelluksia, jotka suorittavat useita tehtäviä. Asynkroninen ohjelmointi on kätevää useiden verkkopyyntöjen käsittelyssä tai suurten tietomäärien käsittelyssä suoritusvirtaa estämättä.

Asynkroninen ohjelmointi ruosteessa

Rustin asynkroninen ohjelmointimalli mahdollistaa sen kirjoittaa tehokasta Rust-koodia, joka toimii samanaikaisesti estämättä suoritusvirtaa. Asynkroninen ohjelmointi on hyödyllistä, kun käsitellään I/O-toimintoja, verkkopyyntöjä ja tehtäviä, joihin liittyy ulkoisten resurssien odottamista.

instagram viewer

Voit toteuttaa asynkronisen ohjelmoinnin Rust-sovelluksissasi useilla tavoilla. Näitä ovat kieliominaisuudet, kirjastot ja Tokion ajonaika.

Myös, Rustin omistusmalli ja samanaikaisuusprimitiivit, kuten kanavat ja lukot, mahdollistavat turvallisen ja tehokkaan samanaikaisen ohjelmoinnin. Voit hyödyntää näitä ominaisuuksia asynkronisen ohjelmoinnin avulla rakentaaksesi samanaikaisia ​​järjestelmiä, jotka skaalautuvat hyvin ja käyttävät useita prosessoriytimiä.

Rustin asynkroniset ohjelmointikonseptit

Futuurit tarjoavat perustan asynkroniselle ohjelmoinnille Rustissa. Tulevaisuus edustaa asynkronista laskentaa, jota ei ole suoritettu kokonaan.

Futuurit ovat laiskoja (ne toteutetaan vain äänestyksissä). Kun kutsut tulevaisuutta kysely () menetelmällä se tarkistaa, onko tulevaisuus valmis vai tarvitseeko lisätyötä. Jos tulevaisuus ei ole valmis, se palaa Kysely:: Odottaa, mikä osoittaa, että tehtävä tulee ajoittaa myöhempää suorittamista varten. Jos tulevaisuus on valmis, se palaa Äänestys:: Valmis tuloksena olevan arvon kanssa.

Rustin vakiotyökaluketju sisältää asynkroniset I/O-primitiivit, asynkronisen version tiedosto-I/O: sta, verkkoyhteyden ja ajastimet. Näiden primitiivien avulla voit suorittaa I/O-operaatioita asynkronisesti. Tämä auttaa välttämään ohjelman suorittamisen estämistä odottaessaan I/O-tehtävien valmistumista.

Asynkroninen / odotussyntaksin avulla voit kirjoittaa asynkronista koodia, joka näyttää samanlaiselta kuin synkroninen koodi. Tämä tekee koodistasi intuitiivisen ja helppohoitoisen.

Rustin lähestymistapa asynkroniseen ohjelmointiin korostaa turvallisuutta ja suorituskykyä. Omistus- ja lainaussäännöt varmistavat muistin turvallisuuden ja estävät yleisiä samanaikaisia ​​ongelmia. Asynkroninen/ odotussyntaksi ja futuurit tarjoavat intuitiivisen tavan ilmaista asynkronisia työnkulkuja. Voit käyttää kolmannen osapuolen suoritusaikaa tehtävien hallintaan tehokkaan suorittamisen varmistamiseksi.

Voit yhdistää näitä kieliominaisuuksia, kirjastoja ja ajonaikaa kirjoittaaksesi erittäin suorituskykyistä koodia. Se tarjoaa tehokkaan ja ergonomisen kehyksen asynkronisten järjestelmien rakentamiseen. Tämä tekee Rustista suositun valinnan projekteihin, jotka vaativat tehokasta I/O-sidottujen tehtävien käsittelyä ja suurta samanaikaisuutta.

Rustin versio 1.39 ja uudemmat versiot eivät tue asynkronisia toimintoja Rustin vakiokirjastossa. Tarvitset kolmannen osapuolen laatikon käyttääksesi sitä asynk/odottaa syntaksi asynkronisten toimintojen käsittelemiseen Rustissa. Voit käyttää kolmannen osapuolen paketteja, kuten Tokio tai async-std työskentelemään async/await-syntaksin kanssa.

Asynkroninen ohjelmointi Tokion kanssa

Tokio on kestävä asynkroninen suoritusaika Rustille. Se tarjoaa toimintoja erittäin suorituskykyisten ja skaalautuvien sovellusten rakentamiseen. Voit valjastaa asynkronisen ohjelmoinnin tehon Tokion kanssa. Se tarjoaa myös laajennettavia ominaisuuksia.

Tokion ytimenä on sen asynkroninen tehtävien ajoitus ja suoritusmalli. Tokio antaa sinun kirjoittaa asynkronisen koodin async/await-syntaksilla. Tämä mahdollistaa tehokkaan järjestelmäresurssien käytön ja samanaikaisen tehtävien suorittamisen. Tokion tapahtumasilmukka hallitsee tehokkaasti tehtävien ajoituksen. Tämä varmistaa prosessoriytimien optimaalisen käytön ja minimoi kontekstin vaihtamisen.

Tokion kombinaattorit tekevät tehtävien koordinoinnista ja sommittelusta helppoa. Tokio tarjoaa tehokkaat tehtäväkoordinointi- ja kokoonpanotyökalut. Voit odottaa useiden tehtävien suorittamista liittymällä, valita ensimmäisen suoritetun tehtävän Select-toiminnolla ja kilpailla tehtäviä toisiaan vastaan ​​kilpailulla.

Lisää tokio laatikko sinun Cargo.toml tiedoston riippuvuudet -osiossa.

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

Näin voit käyttää async/await-syntaksia Rust-ohjelmissasi Tokion kanssa:

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 Hei maailma toiminto on asynkroninen, joten se voi käyttää odottaa avainsana keskeyttää sen suorittamisen, kunnes tulevaisuus on ratkaistu. The Hei maailma funktio tulostaa "Hei, " konsoliin. The Kesto:: from_sec (1) funktiokutsu keskeyttää funktion suorittamisen sekunniksi. The odottaa avainsana odottaa nukkumisen tulevaisuuden valmistumista. Lopuksi, Hei maailma funktio tulostaa "Maailman!" konsoliin.

The pää -toiminto on asynkroninen funktio #[tokio:: main] attribuutti. Se määrittää päätoiminnon Tokion suoritusajan sisääntulopisteeksi. The hello_world().wait suorittaa hello_world-funktion asynkronisesti.

Tehtävien lykkääminen Tokion kanssa

Asynkronisen ohjelmoinnin yleinen tehtävä on käyttää viiveitä tai ajoitustehtäviä suoritettavaksi tietyllä aikavälillä. Tokio-ajoaika tarjoaa mekanismin asynkronisten ajastimien ja viiveiden käyttämiseen tokio:: aika moduuli.

Näin voit viivyttää toimintoa Tokion ajonajan kanssa:

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 viivästetty_toiminto toiminto lisää kahden sekunnin viiveen kanssa nukkua menetelmä. The viivästetty_toiminto -toiminto on asynkroninen, joten se voi keskeyttää suorituksensa odotustoiminnolla, kunnes viive on valmis.

Virheiden käsittely asynkronisissa ohjelmissa

Asynkronisen Rust-koodin virheiden käsittelyyn kuuluu Tulos tyyppi ja ruostevirheiden käsittely kanssa ? operaattori.

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 read_file_contents funktio palauttaa an io:: Tulos joka edustaa I/O-virheen mahdollisuutta. Käyttämällä ? operaattorin jokaisen asynkronisen toiminnon jälkeen, Tokion ajonaika siirtää virheet puhelupinoon.

The pää funktio käsittelee tuloksen a: lla ottelu lauseke, joka tulostaa tekstin toiminnan tuloksen perusteella.

Reqwest käyttää asynkronista ohjelmointia HTTP-toimintoihin

Monet suositut laatikot, mukaan lukien Reqwest, käyttävät Tokiota asynkronisten HTTP-toimintojen tarjoamiseen.

Voit käyttää Tokioa Reqwestin kanssa useiden HTTP-pyyntöjen tekemiseen estämättä muita tehtäviä. Tokio voi auttaa sinua käsittelemään tuhansia samanaikaisia ​​yhteyksiä ja hallitsemaan resursseja tehokkaasti.