为什么存在std::task、core::task和tokio::task这三个东西?

4
1个回答

5

这些都是模块,它们共存并具有相同的名称并不意味着什么。任何任意的板条箱都可以创建一个任务模块(或类型或特征等)。这就是为什么大多数编程语言首先都有命名空间的原因 - 这样我们就可以避免名称冲突。

  1. std::taskcore::task的重新导出,只是名称不同。它包含了创建future以及驱动它们的执行器的构建块。只有极少数人需要使用这些类型。

  2. tokio::task允许创建Tokio的“异步绿色线程”,这是异步世界中线程的语义等价物。有关更多详细信息,请参见Tokio网站上的生成任务部分。

    async_std::task也是同样的东西,只不过是为另一个执行器而设计的。async-std任务与Tokio任务不同,不能互换使用。

  3. futures::task在标准库模块和执行器模块之间有点混杂。这是由于它的历史原因——futures crate是将futures实现移入标准库之前的实现。现在它包含了标准库类型的重新导出,以及一些用于创建执行器的工具和用于在由futures库提供的执行器上生成任务的特性。

另请参阅:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接