生成 mio 代币时应注意哪些约束?



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

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

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

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

谢谢!

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

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

当然可以。

我可以使用Token=0同时表示TcpStream和pending Timeout,或者它们都存储在相同的Token集合中吗?

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

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

。正如我上面所说的,mio并不关心你的令牌的价值。

相关内容

  • 没有找到相关文章

最新更新