Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Крейт 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 в пуле потоков

Функции

ФункцияОписание
block_onБлокирует текущий поток на фьючерсе, обрабатывая I/O события в простое
spawnЗапускает задачу в глобальном исполнителе (по умолчанию однопоточном)
unblockВыполняет блокирующий код в пуле потоков