1

我有一个UIO 驱动程序,它在一个所谓的wait_on_complete函数中轮询文件描述符以等待中断。这是完全同步的,所以会阻塞(有超时)。我想迁移这样的代码wait_on_completeasync或者可以很容易地包装以创建有用的Future),但我不确定最好的策略。

我对选项的想法是:

  1. Use mio::Poll,据我了解,这意味着使用 Tokio 反应器,但我无法在 Tokio ^0.3 中遵循 API。在 Tokio 0.2 中似乎有一些东西,但它们已经消失了(尽管它似乎仍然在代码中 - 这只是缺少文档吗?)。
  2. 使用polling它自己的反应器附带的东西。问题是驱动程序似乎是反应堆的错误位置。
  3. 在自己的线程中运行同步代码并与async通道通信。鉴于其中一个要点async是正确集成异步 IO,这在架构上似乎是一个糟糕的选择(实际上,IO 非常适合主状态机)。
  4. 还有一些我不知道的。

(1) 似乎是显而易见的解决方案,但我并不完全清楚如何去做。是否有一些关于创建自己的mio设备并在 Tokio 运行时中使用它的最新文档?

还有其他我想做的事情错过的方法吗?我是否在考虑中遗漏了什么?

4

1 回答 1

1

Async使用from很容易做到这一点async-io

制作一个封装你的结构fdAsRawFd为它实现,然后用Async.

这允许您使用read_with和进行自定义异步操作write_with

于 2020-12-20T00:12:59.230 回答