Структура Aio
pub struct Aio<E> { /* private fields */ }
net.Связывает блок управления POSIX AIO с реактором, который его обрабатывает.
Тип-обёртка Aio должен реализовывать AioSource, чтобы реактор мог его обрабатывать.
Доступ к обёрнутому источнику можно получить через Aio с помощью трейтов Deref и DerefMut.
Сброс готовности
Если Aio::poll_ready возвращает готовое состояние, но потребитель определяет, что источник не полностью готов, и должен вернуться в состояние ожидания, можно использовать Aio::clear_ready. Это может быть полезно с lio_listio, которая может генерировать событие kevent, когда завершается только часть операций.
Платформы
Только FreeBSD реализует POSIX AIO с уведомлениями kqueue, поэтому Aio доступен только в этой операционной системе.
Реализации
impl<E: AioSource> Aio<E>
pub fn new_for_aio(io: E) -> Result<Self>
Создаёт новый Aio, подходящий для использования с функциями POSIX AIO.
Он будет связан с реактором по умолчанию. Среда выполнения обычно задаётся неявно, когда эта функция вызывается из будущего, обрабатываемого средой выполнения Tokio; в противном случае среду выполнения можно задать явно с помощью функции Runtime::enter.
pub fn new_for_lio(io: E) -> Result<Self>
Создаёт новый Aio, подходящий для использования с lio_listio.
Он будет связан с реактором по умолчанию. Среда выполнения обычно задаётся неявно, когда эта функция вызывается из будущего, обрабатываемого средой выполнения Tokio; в противном случае среду выполнения можно задать явно с помощью функции Runtime::enter.
pub fn clear_ready(&self, ev: AioEvent)
Сообщает Tokio, что источник больше не готов. Внутренний флаг готовности будет сброшен, и Tokio будет ждать следующего уведомления ОС о готовности, инициируемого фронтом.
Крайне важно не вызывать этот метод, если ваш код действительно не обнаружил, что источник не готов. ОС должна отправить последующее уведомление, иначе этот источник будет заблокирован навсегда. Не менее важно do вызывать этот метод, если вы повторно отправляете ту же структуру ядру и снова опрашиваете её.
Этот метод не очень полезен для готовности AIO, поскольку каждая структура aiocb обычно используется только один раз. Основное применение — с lio_listio, которая иногда отправляет уведомление, когда завершена только часть её элементов. В этом случае вызывающий код должен вызвать clear_ready перед повторной отправкой.
pub fn into_inner(self) -> E
Уничтожает Aio и возвращает содержащийся в нём источник.
pub fn poll_ready(&self, cx: &mut Context<'_>) -> Poll<Result<AioEvent>>
Проверяет готовность. Учитывается готовность как AIO, так и LIO.
Этот метод возвращает:
-
Poll::Pending, если базовая операция не завершена, независимо от того, завершилась ли она успешно. Это означает, что ОС всё ещё обрабатывает её или она ещё не была отправлена в ОС. -
Poll::Ready(Ok(_)), если базовая операция завершена. -
Poll::Ready(Err(_)), если работа реактора была остановлена. Это не означает, что при выполнении базовой операции произошла ошибка.
Если метод возвращает Poll::Pending, Waker в переданном Context будет запланирован для получения сигнала пробуждения после завершения базовой операции. Обратите внимание: при нескольких вызовах poll_ready сигнал пробуждения будет запланирован только для Waker из Context, переданного при последнем вызове.
Реализации трейтов
Реализации автоматических трейтов
impl<E> !RefUnwindSafe for Aio<E>
impl<E> !UnwindSafe for Aio<E>
impl<E> Freeze for Aio<E>where E: Freeze,
impl<E> Send for Aio<E>where E: Send,
impl<E> Sync for Aio<E>where E: Sync,
impl<E> Unpin for Aio<E>where E: Unpin,
impl<E> UnsafeUnpin for Aio<E>where E: UnsafeUnpin,
Общие реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<P, T> Receiver for P
type Target = T
arbitrary_self_types)
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/io/bsd/struct.Aio.html