2

用于异步 I/O的mio依赖于开发人员提供类型Token实例,以便将发生的事件关联回源,例如特定的TcpStreamHandler::Timeout.

实现中可以看出,Token它只是一个围绕 a 的包装器类型usize。每次Token需要 a 时简单地增加一个计数器是很诱人的,但它最终会溢出。

Tokens在生成传递给?时,我应该记住哪些规则EventLoop?一些具体问题:

  • 如果我有两个线程,每个线程都有自己的EventLoop,它们都可以Token=0用来监听两个不同流上的事件吗?(即Tokens绑定到特定EventLoop实例?)
  • 我可以Token=0用来同时表示 aTcpStream和 apending Timeout,还是它们都存储在同一个令牌集合中?
  • 0从跳到有什么害处1,000,000吗?(例如,它们是否存储在针对序列号优化的数据结构中?)

谢谢!

4

1 回答 1

2

简短版本:mio除了在收到相应事件时将它们传回给您之外,实际上并没有对令牌做任何事情,因此您可以使用任何您想要的令牌mio。单独回答您的问题:

如果我有两个线程,每个线程都有自己的 EventLoop,它们都可以使用 Token=0 来监听两个不同流上的事件吗?(即令牌是否绑定到特定的 EventLoop 实例?)

当然,那很好。

我可以使用 Token=0 同时表示 TcpStream 和挂起的超时,还是它们都存储在同一个令牌集合中?

mio没有令牌集合。如果您不需要唯一的令牌来识别应用程序代码中的内容,您可以在不同的地方自由使用相同的令牌。(不过,我对这个问题有点困惑,因为据我所知,超时根本不使用 mio Token

从 0 跳到 1,000,000 有什么坏处吗?(例如,它们是否存储在针对序列号优化的数据结构中?)

不,正如我上面所说,mio 不关心你的代币的价值。

于 2015-09-13T15:09:48.137 回答