stringtranslate.com

Tokio (software)

Tokio es una biblioteca de software para el lenguaje de programación Rust . Proporciona un entorno de ejecución y funciones que permiten el uso de E/S asincrónicas , lo que permite la concurrencia en lo que respecta a la finalización de tareas. [2] [3] [4]

Tokio se lanzó en agosto de 2016 para Rust, un lenguaje de programación de propósito general . Desarrollado por Carl Lerche, Tokio comenzó como un marco de trabajo de aplicaciones de red y admite funciones como escucha y transmisión de sockets , lo que permite transferir mensajes entre computadoras.

Historia

Tokio comenzó en agosto de 2016 por Carl Lerche como un marco de aplicación de red para Rust construido sobre futures , lo que permite un middleware basado en red y una implementación no bloqueante o asincrónica de interés de preparación para el reactor . Tokio se inspiró en Finagle, un sistema de llamada a procedimiento remoto (RPC) asincrónico basado en Scala desarrollado en Twitter para máquinas virtuales Java (JVM), lo que permite que los sistemas distribuidos se comuniquen dentro de una JVM. Tokio utiliza el crate Rust de nivel inferior , que utiliza llamadas del sistema como epoll ( Linux ), kqueue ( FreeBSD ) y la API del puerto de finalización de entrada/salida (IOCP) ( Windows ). Para Linux, también puede usar io_uring a través de tokio-uring. [5] [6] [7] El nombre "Tokio" se deriva de Tokyo y mio. [8] La versión preliminar de Tokio se lanzó en enero de 2017, [9] seguida de un lanzamiento completo en diciembre de 2020. [10] [11] En 2017, Tokio recibió una subvención del fondo de apoyo al código abierto de Mozilla . [12] En abril de 2021, Tokio financió a su primera colaboradora remunerada, Alice Ryhl, por su trabajo tanto en el desarrollo del proyecto como en la asistencia a sus usuarios. [13] [14]mio

Si bien Rust admite funciones asincrónicas desde la versión 1.39, lanzada en noviembre de 2019, [15] no proporciona instalaciones para ejecutarlas, lo que requiere un entorno de ejecución externo para ese propósito. [16] Tokio proporciona un entorno de ejecución que utiliza un programador de robo de trabajo de múltiples subprocesos . [10] Los futuros de Rust se evalúan de forma diferida , lo que requiere que las funciones se llamen .awaitantes de realizar cualquier trabajo. [17] Cuando .awaitse invoca, el entorno de ejecución de Tokio puede pausar el futuro original hasta que se complete su E/S y reanuda una tarea diferente que esté lista para su procesamiento posterior. [18]

Los usuarios de Tokio incluyen los equipos de desarrollo detrás de Discord y AWS Lambda . [10] El entorno de ejecución de JavaScript y TypeScript Deno usa Tokio en segundo plano, en comparación con el entorno de ejecución de JavaScript Node.js , que usa la biblioteca libuv . [19]

Características

Código asincrónico

Tokio permite el uso de funciones asincrónicas en Rust mediante la creación de un entorno de ejecución asincrónico. Esto se puede lograr mediante la #[tokio::main] macro . [18]

Por ejemplo:

#[tokio::main] async fn main () -> Resultado < () > { let url = "https://en.wikipedia.org/" ; let text = reqwest :: get ( url ) .await ? .text (). await ?; println! ( " {}" , text ); Ok ( ()) }               

En este ejemplo, el reqwestcontenedor se utiliza para solicitar el lenguaje de marcado de hipertexto (HTML) para la Wikipedia en inglés . Para garantizar que la solicitud no se procese de inmediato, Tokio envuelve la llamada de función en un entorno de ejecución asincrónico y espera a que se complete la solicitud antes de llamar a println().

Tokio también incluye una versión de la biblioteca estándar de Rust diseñada para usarse de forma asincrónica. Por ejemplo, , tokio::fs::read_to_end()que lee el contenido de un archivo, es la versión asincrónica de std::fs::read_to_end(). [20] Además, Tokio admite io_uring , una interfaz de llamada al sistema de E/S asincrónica de Linux, en una caja separada llamada tokio-uring. [10] [21]

El modelo de corrutina

Tokio también permite a los usuarios crear tareas, que son corrutinas sin pila , utilizando una tokio::spawn()función. Las tareas se ejecutan a nivel de usuario, lo que proporciona concurrencia incluso cuando solo hay un único hilo. [22]

Escucha de socket

Tokio es capaz de escuchar en un socket a través de un enfoque sin bloqueo . [5] En particular, la TcpListenerestructura vincula un oyente de socket de Protocolo de control de transmisión (TCP) a una dirección y ejecuta la función de forma asincrónica. [23]

Radiodifusión

Tokio ofrece un tipo de canal de difusión que permite transmitir mensajes a múltiples receptores. Al enviar un mensaje, este es recibido por dichos receptores. Esto permite la comunicación en tiempo real y los sistemas distribuidos, entre otras aplicaciones. [24]

Referencias

  1. ^ "Versión 1.41.0". 22 de octubre de 2024. Consultado el 27 de octubre de 2024 .
  2. ^ Chanda, Abhishek (2018). Programación de redes con Rust: cree servidores y clientes de red rápidos y resistentes aprovechando las características de seguridad de memoria y concurrencia de Rust. Birmingham: Packt Publishing. ISBN 978-1-78862-171-7.OCLC 1028194311  .
  3. ^ Sharma, Rahul (2019). Mastering Rust: aprenda sobre seguridad de memoria, sistema de tipos, concurrencia y las nuevas características de Rust edición 2018. Vesa Kaihlavirta (segunda edición). Birmingham, Reino Unido. ISBN 978-1-78934-118-8.OCLC 1090681119  .{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  4. ^ De Simone, Sergio (6 de enero de 2021). "Rust Asynchronous Runtime Tokio llega a la versión 1.0". InfoQ . Consultado el 21 de noviembre de 2021 .
  5. ^ ab Lerche, Carl (3 de agosto de 2016). "Anunciando Tokio" . Consultado el 11 de diciembre de 2022 .
  6. ^ "Finagle: un sistema RPC independiente del protocolo". 19 de agosto de 2011. Consultado el 11 de diciembre de 2022 .
  7. ^ Gomez, Guillaume; Boucher, Antoni (2018). Programación en Rust con ejemplos: ingrese al mundo de Rust mediante la creación de aplicaciones atractivas, concurrentes, reactivas y robustas. Birmingham: Packt Publishing. ISBN 9781788470308.
  8. ^ Lerche, Carl (3 de agosto de 2016). "Disfruté de visitar la ciudad de Tokio y me gustó el sufijo "io" y cómo se relaciona con Mio también. No sé... ponerle nombre es difícil, así que no le dediqué demasiado tiempo a pensarlo". Reddit . Consultado el 11 de diciembre de 2022 .
  9. ^ Lerche, Carl; Crichton, Alex; Turón, Aarón. "Anuncio de Tokio 0.1" . Consultado el 11 de diciembre de 2022 .
  10. ^ abcd Krill, Paul (8 de enero de 2021). "El entorno de ejecución de Tokyo Rust alcanza el estado 1.0". InfoWorld . Consultado el 3 de septiembre de 2021 .
  11. ^ Lerche, Carl. "Anuncio de Tokio 1.0" . Consultado el 11 de diciembre de 2022 .
  12. ^ "Mozilla otorga 365.000 dólares a proyectos de código abierto como parte de MOSS". LWN.net . Consultado el 21 de noviembre de 2021 .
  13. ^ "Damos la bienvenida a Alice Ryhl como la primera colaboradora remunerada de Tokio". Tokio . Consultado el 28 de noviembre de 2021 .
  14. ^ Allen Wyma (12 de noviembre de 2021). "El ecosistema de Tokio con Alice Ryhl". Rustacean Station (podcast) . Consultado el 26 de noviembre de 2021 .
  15. ^ "Rust obtiene soporte Async/Await sin costo en Rust 1.39". InfoQ . Consultado el 28 de noviembre de 2021 .
  16. ^ "El ecosistema asincrónico". Programación asincrónica en Rust . Consultado el 28 de noviembre de 2021 .
  17. ^ Matsakis, Niko (7 de noviembre de 2019). "Async-await en Rust estable". Blog de Rust . Consultado el 28 de noviembre de 2021 .
  18. ^ ab "Hola Tokio". Tokio . Consultado el 28 de noviembre de 2021 .
  19. ^ Rappl Moraza, Florian (2022). Desarrollo de frontend moderno con Node.js: un compendio para el desarrollo web moderno con JavaScript dentro del ecosistema Node.js. Birmingham, Reino Unido. ISBN 9781804617380.{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  20. ^ "I/O". Tokio . Consultado el 11 de diciembre de 2022 .
  21. ^ "Anunciando tokio-uring: io-uring apoyará a Tokio". Tokio . Consultado el 28 de noviembre de 2021 .
  22. ^ Sintes, Tony (13 de abril de 2001). «Cuatro para la posteridad». InfoWorld . Consultado el 5 de enero de 2023 .
  23. ^ Eguia Moraza, Iban (2018). Rust de alto rendimiento: aprenda a disparar el rendimiento de sus aplicaciones Rust. Birmingham, Reino Unido. ISBN 978-1-78847-823-6.OCLC 1033544275  .{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  24. ^ Blandy, Jim; Orendoff, Jason; Tindall, Leonara (2019). Programación de óxido. Sebastopol. ISBN 9781492052548.{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )

Enlaces externos