【发布时间】:2018-09-09 12:56:27
【问题描述】:
一旦有了协程,您就可以创建管道(haskell:管道、管道;python:生成器)或协作事件循环(python:curio)。一旦你有了期货,你似乎也可以这样做;管道(rust:futures-rs)和事件循环(rust:tokio)。由于期货不合作,它们需要基于回调(甚至基于轮询的期货也需要回调)调度程序来执行线程或进程池中的阻塞任务。将期货(库级)与协程(语言级)结合起来有什么好处,就像这些语言一样:(python:asyncio),(rust:rfc),(ecmascript 6+)。从根本上说,它们似乎是针对同一问题的相互矛盾的解决方案。
我不是在寻找一个赞成/反对的比较,我不相信期货是“一次性”协程的论点。看看 rust,它只使用期货构建了一个完整的基于状态机的事件框架。我想知道为什么 python/asyncio 和 javascript 都需要协程和期货。为什么 rust 计划在其未来添加协程?它与事件的可组合性有关吗?还是隐式的协程堆栈与显式的连续传递期货堆栈?并不是说我完全理解这个论点,因为futures 和coroutines 都是使用continuations 实现的......或者它与直接风格和间接风格有关?
【问题讨论】:
-
看起来像“生命的意义是什么”?
标签: rust future theory coroutine event-loop