gpt4 book ai didi

asynchronous - 将同步Rust IO驱动程序转换为 `async`

转载 作者:行者123 更新时间:2023-12-03 11:36:36 25 4
gpt4 key购买 nike

我有一个UIO driver,在所谓的wait_on_complete函数中,它轮询文件描述符以等待中断。这是完全同步的,因此会阻塞(带有超时)。我想迁移代码,使wait_on_completeasync(或可以很容易地包装以便创建有用的Future),但是我不确定这样做的最佳策略。
我对选项的看法是:

  • 使用 mio::Poll ,据我了解,这意味着使用Tokio react 堆,但是我无法在Tokio ^ 0.3中遵循此API。在Tokio 0.2中似乎有一个few things around,但是它们已经消失了(尽管它似乎仍然在代码中-这只是缺少文档吗?)。
  • 使用它自己的 react 堆附带的 polling 之类的东西。这样做的问题是驱动程序似乎在 react 堆的位置不正确。
  • 在其自己的线程中运行同步代码,并与async channel 进行通信。鉴于async的要点之一是正确集成异步IO,这在体系结构上似乎是一个糟糕的选择(实际上,该IO非常适合主状态机)。
  • 我不知道的其他事情。

  • (1)似乎是显而易见的解决方案,但我尚不完全清楚如何解决此问题。是否有一些有关创建自己的 mio设备并在Tokio运行时中使用该设备的最新文档?
    我是否想做其他想做的事情?我是否错过了某些考虑事项?

    最佳答案

    使用Async中的 async-io 可以很容易地做到这一点。
    创建一个封装您的fd的结构,为其实现AsRawFd,然后用Async对其进行包装。
    这使您可以使用read_withwrite_with进行自定义异步操作。

    关于asynchronous - 将同步Rust IO驱动程序转换为 `async`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65180714/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com