Крейт smol
Источник: Официальная документация smol
Маленький и быстрый асинхронный рантайм.
Этот крейт просто реэкспортирует другие небольшие асинхронные крейты (см. исходный код).
Использование с библиотеками на базе Tokio
Чтобы использовать библиотеки на базе Tokio со smol, примените адаптер async-compat к фьючерсам и типам I/O.
Упрощенная настройка
См. крейт smol-macros, если вам нужна настройка без proc-макросов, с быстрой компиляцией и простым в использовании асинхронным main и/или многопоточным исполнителем (Executor) "из коробки".
Дополнения к smol
В дополнение к проекту smol в качестве прямой замены, вам могут быть полезны и другие части экосистемы фьючерсов, включая futures-concurrency, async-io, futures-lite и async-compat.
Примеры
Подключение к HTTP-сайту, выполнение GET-запроса и вывод ответа в стандартный вывод:
use smol::{io, net, prelude::*, Unblock}; fn main() -> io::Result<()> { smol::block_on(async { let mut stream = net::TcpStream::connect("example.com:80").await?; let req = b"GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n"; stream.write_all(req).await?; let mut stdout = Unblock::new(std::io::stdout()); io::copy(stream, &mut stdout).await?; Ok(()) }) }
Больше примеров можно найти в директории examples.
Модули
| Модуль | Описание |
|---|---|
channel | Асинхронный многопоточный канал, где каждое сообщение может быть получено только одним из всех существующих потребителей |
fs | Примитивы для асинхронной работы с файловой системой |
future | Комбинаторы для трейта Future |
io | Инструменты и комбинаторы для I/O операций |
lock | Асинхронные примитивы синхронизации |
net | Асинхронные примитивы для TCP/UDP/Unix коммуникации |
prelude | Трейты Future, Stream, AsyncRead, AsyncWrite, AsyncBufRead, AsyncSeek и их расширения |
process | Асинхронный интерфейс для работы с процессами |
stream | Комбинаторы для трейта Stream |
Макросы
| Макрос | Описание |
|---|---|
pin | Фиксирует переменную типа T в стеке и перепривязывает её как Pin<&mut T> |
ready | Разворачивает Poll<T> или возвращает Pending |
Структуры
| Структура | Описание |
|---|---|
Async | Асинхронный адаптер для I/O типов |
Executor | Асинхронный исполнитель |
LocalExecutor | Поточно-локальный исполнитель |
Task | Запущенная задача |
Timer | Фьючерс или поток, который эмитирует события по времени |
Unblock | Выполняет блокирующий I/O в пуле потоков |