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.
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 .await
antes de realizar cualquier trabajo. [17] Cuando .await
se 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]
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 reqwest
contenedor 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]
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]
Tokio es capaz de escuchar en un socket a través de un enfoque sin bloqueo . [5] En particular, la TcpListener
estructura 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]
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]
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )