Асинхроно програмирање је важан концепт којег морате бити свесни као Руст програмер.
Традиционални модели синхроног програмирања често доводе до уских грла у перформансама. То је зато што програм чека да се споре операције заврше пре него што пређе на следећи задатак. Ово често резултира лошом употребом ресурса и спорим корисничким искуством.
Асинхроно програмирање вам омогућава да пишете неблокирајући код који ефикасно користи системске ресурсе. Коришћењем асинхроног програмирања, можете дизајнирати апликације које обављају више задатака. Асинхроно програмирање је згодно за руковање неколико мрежних захтева или обраду великих количина података без блокирања тока извршења.
Асинхроно програмирање у Русту
Рустов модел асинхроног програмирања вам омогућава да написати ефикасан Руст код који се покреће истовремено без блокирања тока извршења. Асинхроно програмирање је корисно када се ради са И/О операцијама, мрежним захтевима и задацима који укључују чекање на спољне ресурсе.
Асинхроно програмирање можете имплементирати у своје Руст апликације на неколико начина. То укључује језичке карактеристике, библиотеке и Токио рунтиме.
такође, Рустов модел власништва а паралелни примитиви као што су канали и браве омогућавају сигурно и ефикасно истовремено програмирање. Ове функције можете искористити асинхроним програмирањем да бисте изградили истовремене системе који се добро скалирају и користе више ЦПУ језгара.
Руст-ови концепти асинхроног програмирања
Будућност пружа основу за асинхроно програмирање у Русту. Будућност представља асинхроно израчунавање које није у потпуности извршено.
Фјучерси су лењи (они се извршавају само када су на гласању). Када зовете будућност анкета() методом, проверава да ли је будућност завршена или је потребан додатни рад. Ако будућност није спремна, она се враћа Анкета:: На чекању, што указује да задатак треба заказати за касније извршење. Ако је будућност спремна, она се враћа Анкета:: Спремни са резултујућом вредношћу.
Руст-ов стандардни ланац алата укључује асинхроне И/О примитиве, асинхрону верзију У/И датотека, умрежавање и тајмере. Ови примитиви вам омогућавају да изводите И/О операције асинхроно. Ово помаже да се избегне блокирање извршавања програма док се чека да се заврше И/О задаци.
Синтакса асинц/аваит вам омогућава да пишете асинхрони код који изгледа слично синхроном коду. Ово чини ваш код интуитивним и лаким за одржавање.
Рустов приступ асинхроном програмирању наглашава безбедност и перформансе. Правила о власништву и позајмљивању обезбеђују сигурност меморије и спречавају уобичајене проблеме истовремености. Синтакса Асинц/аваит и будућност пружају интуитиван начин за изражавање асинхроних токова посла. За управљање задацима за ефикасно извршење можете да користите рунтиме треће стране.
Можете комбиновати ове језичке карактеристике, библиотеке и време извођења да бисте написали код са високим перформансама. Пружа моћан и ергономски оквир за изградњу асинхроних система. Ово чини Руст популарним избором за пројекте који захтевају ефикасно руковање задацима везаним за У/И и високу конкурентност.
Руст верзија 1.39 и новије верзије не подржавају асинхроне операције у Руст стандардној библиотеци. Требаће вам сандук треће стране да бисте га користили асинц/чекати синтакса за руковање асинхроним операцијама у Русту. Можете користити пакете треће стране као што су Токио или асинц-стд за рад са синтаксом асинц/аваит.
Асинхроно програмирање са Токиом
Токио је робусно асинхроно време извођења за Руст. Пружа функционалност за изградњу високоучинковитих и скалабилних апликација. Можете искористити моћ асинхроног програмирања са Токиом. Такође пружа функције за проширивост.
У основи Токија је његов модел асинхроног планирања и извршавања задатака. Токио вам омогућава да пишете асинхрони код са синтаксом асинц/аваит. Ово омогућава ефикасно коришћење системских ресурса и истовремено извршавање задатака. Токиова петља догађаја ефикасно управља заказивањем задатака. Ово обезбеђује оптимално коришћење ЦПУ језгара и минимизира трошкове промене контекста.
Токио-ови комбинатори олакшавају координацију задатака и састављање. Токио пружа моћне алате за координацију задатака и састављање. Можете сачекати да се више задатака заврши са спајањем, изаберите први завршени задатак са одабиром и тркајте се задатака један против другог трком.
Додајте токио сандук свом Царго.томл одељак зависности датотеке.
[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) позив функције суспендује извршење функције на секунду. Тхе чекати кључна реч чека да се заврши будућност спавања. Коначно, Здраво Свете функција штампа "Свет!" на конзолу.
Тхе главни функција је асинхрона функција са #[токио:: маин] атрибут. Он означава главну функцију као улазну тачку за Токио рунтиме. Тхе хелло_ворлд(). чекам извршава функцију хелло_ворлд асинхроно.
Одлагање задатака са Токиом
Преовлађујући задатак у асинхроном програмирању је коришћење кашњења или задатака планирања за извођење у одређеном временском опсегу. Токио рунтиме обезбеђује механизам за коришћење асинхроних тајмера и кашњења кроз токио:: време модул.
Ево како можете да одложите операцију са Токио рунтиме-ом:
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.");
}
Тхе одложена_операција функција уводи одлагање од две секунде са спавати методом. Тхе одложена_операција функција је асинхрона, тако да може да користи чекање да паузира своје извршавање док се кашњење не заврши.
Руковање грешкама у асинхроним програмима
Руковање грешкама у асинхроном Руст коду укључује коришћење Резултат врста и руковање Руст грешкама са ? оператер.
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),
}
}
Тхе реад_филе_цонтентс функција враћа ан ио:: Резултат што представља могућност И/О грешке. Коришћењем ? оператора након сваке асинхроне операције, Токио рунтиме ће ширити грешке у стеку позива.
Тхе главни функција обрађује резултат са а меч изјава која штампа текст на основу исхода операције.
Реквест користи асинхроно програмирање за ХТТП операције
Многи популарни сандуци, укључујући Реквест, користе Токио за обезбеђивање асинхроних ХТТП операција.
Можете користити Токио са Реквест-ом да направите неколико ХТТП захтева без блокирања других задатака. Токио вам може помоћи да управљате хиљадама истовремених веза и ефикасно управљате ресурсима.