Spec-Zone.ru › Tokio

Структура Aio

pub struct Aio<E> { /* private fields */ }
Доступно только в FreeBSD и при включённой возможности crate 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: AioSource + Debug> Debug for Aio<E>

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматировщика. Подробнее

impl<E: AioSource> Deref for Aio<E>

type Target = E

Тип, получаемый в результате разыменования.

fn deref(&self) -> &E

Разыменовывает значение.

impl<E: AioSource> DerefMut for Aio<E>

fn deref_mut(&mut self) -> &mut E

Разыменовывает значение с возможностью его изменения.

Реализации автоматических трейтов

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> Any for T
where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

Получает TypeId для self. Подробнее

impl<T> Borrow<T> for T
where T: ?Sized,

fn borrow(&self) -> &T

Неизменяемо заимствует значение, принадлежащее вызывающему коду. Подробнее

impl<T> BorrowMut<T> for T
where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

Изменяемо заимствует значение, принадлежащее вызывающему коду. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью предоставленного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

impl<T, U> Into<U> for T
where U: From<T>,

fn into(self) -> U

Вызывает U::from(self).

То есть результат этого преобразования определяется реализацией From<T> for U.

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

type Target = T

🔬Это экспериментальный API, доступный только в nightly. (arbitrary_self_types)
Целевой тип, для которого можно вызвать метод.

impl<T, U> TryFrom<U> for T
where U: Into<T>,

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Выполняет преобразование.

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error

Тип, возвращаемый в случае ошибки преобразования.

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API