collapse

* Posts Recentes

DIY - Robot Arm por zordlyon
[Hoje às 14:09]


Curiosidade Ferro Soldar por dropes
[22 de Novembro de 2022, 12:17]


Fonte de alimentação +/-15V para tensões de entrada <80Vdc por jm_araujo
[14 de Novembro de 2022, 16:25]


ua796 jurássico por SerraCabo
[08 de Novembro de 2022, 23:55]


Resistência interna de transformador por SerraCabo
[08 de Novembro de 2022, 23:42]


Resistência paralela com bateria primária de Lítio. por jm_araujo
[06 de Novembro de 2022, 18:49]


Precisão de condensadores de origem na China por dropes
[05 de Novembro de 2022, 20:44]


Imagine this kind of development tools for your favourite Programming Language. por blabla
[04 de Novembro de 2022, 22:16]


Ajuda Identificar Resistência por SerraCabo
[02 de Novembro de 2022, 22:27]


How an Atomic Clock Really Works, Round 2: Zeeman Alignment por jm_araujo
[01 de Novembro de 2022, 00:02]

Autor Tópico: Programação assíncrona Async e Await em Rust com Tokio.  (Lida 739 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline blabla

  • Mini Robot
  • *
  • Mensagens: 249
Programação assíncrona Async e Await em Rust com Tokio.
« em: 08 de Setembro de 2021, 14:46 »
Boa tarde a todos,

quando se tem de fazer muito IO (input e output) quer seja de ficheiros, de networking ou de timers na nossa aplicação (servidor), a programação assíncrona com async e await consegue obter performances muito superiores ao fazer um melhor uso dos recursos da máquina. Isto, quando comparado com uma aplicação que seja simplesmente implementada em cima de uma pool de threads, pois a programação não é bloqueante e não se paga o peso de comutação de uma thread pelo sistema operativo. Por não se necessitar de sair de user space para kernel space. As tasks da programação assíncrona são depois mapeadas para user space threads que por sua vez, n user threads são mapeadas para threads de sistema partilhadas. Imaginemos uma para cada virtual core. Dois virtual cores para cada core. Algo assim. 

A melhor implementação de async e await em Rust é o Tokio.

Por exemplo uma Web Framework para fazer WebAPI’s e WebSites a Actix usa o Tokio por baixo e consegue num único servidor servir 650.000 pedidos por segundo. (Ver benchmark em baixo), É a segundo Web Framework mais rápido que existe de qualquer linguagem, estando a meros 4 % do mais rápido de todos e em tempos já foi o mais rápido.

Para fazer logging traces pode usar-se uma lib, em Rust chamado de crates, com o nome de Tracing.

Este é um vídeo que ensina a programar em async e await e em que faz hands-on um Chat Server.

Video - Creating a Chat Server with async Rust and Tokio – Lily Mara


Vejam a seguinte explicação em vídeo, hands on, de como funciona e como programar async and await em Rust usando a implementação do Tokio. O vídeo vale mesmo a pena e eu irei incluir este link no meu guia de como aprender Rust, o vídeo parte do zero e dá uma visão intuitiva, mas no decorrer do vídeo o autor vai mais a fundo nos diferentes temas, sempre a ilustrar com código o que ele pretende mostrar e explicar. O vídeo não é curto, mas vale bem a pena do tempo dispensado a vê-lo.

Video - Crust of Rust: async e await - Jon Gjengset


Vejam os tutoriais do Tokio,  async e await implementados na lib ou crate Tokio.
https://tokio.rs/

Actix - O WebAPI Server ou WebServer é que usa o Tokio.
https://actix.rs/

Benchmark comparando o Actix contra outras webframeworks.
Processa 650.000 request por segundo num único servidor.
https://www.techempower.com/benchmarks/#section=data-r19

A plataforma de log tracing chama-se tracing.
https://github.com/tokio-rs/tracing

O seguinte livro, tem um bom capitulo sobre Async e Await, o cap. 20 Asynchronous Programming

Programming Rust: Fast, Safe Systems Development 2nd Ed
by Jim Blandy, Jason Orendorff

O seguinte livro que vai sair em Novembro, também terá uma secção que aborda o tema de programação assíncrona de forma profunda. Abordando como a programação assíncrona em Rust funciona por baixo.

Rust for Rustaceans: Idiomatic Programming for Experienced Developers
by Jon Gjengset

O livro oficial de Rust na próxima edição a de Rust 2021, em principio também irá ter uma secção sobre programação assíncrona.

The Rust Programming Language Book
by Steve Klabnik and Carol Nichols, with contributions from the Rust Community
https://doc.rust-lang.org/stable/book/

Para mais informação sobre Rust vejam:

How to learn modern Rust
https://github.com/joaocarvalhoopen/How_to_learn_modern_Rust

Obrigado,

Cumprimentos,
João