生成mio的令牌时我应该注意哪些约束?

时间:2015-09-12 23:04:36

标签: rust identifier mio

异步I / O的

The mio library依赖于开发人员提供the Token type的实例,以便将发生的事件与源关联起来,例如:特定TcpStreamHandler::Timeout

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

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

  • 如果我有两个线程,每个线程都有自己的EventLoop,他们是否可以使用Token=0来监听两个不同的流上的事件? (即Tokens是否绑定到特定的EventLoop实例?)
  • 我可以使用Token=0同时代表TcpStream和待定Timeout,还是将它们存储在相同的代币集合中?
  • 0跳到1,000,000是否有任何伤害? (例如,它们是否存储在针对序列号优化的数据结构中?)

谢谢!

1 个答案:

答案 0 :(得分:2)

简短版本:mio实际上并没有对令牌做任何事情,除非在收到相应的事件时将它们传回给你,所以你可以使用你想要的任何令牌{{1 }} 被关注到。单独回答您的问题:

  

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

当然,那很好。

  

我可以使用Token = 0同时表示TcpStream和挂起的Timeout,还是它们都存储在相同的Tokens集合中?

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

  

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

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