对啊。coroutine 就是为了对付所有的异步调用。有了 coroutine 以后就再也不需要回调函数了。
你可以看看 python, js, c# 程序员在十年前已经用上 coroutine,用来写网络程序。
除此之外,还有 python 的:
for i in range(10):
print(i)
这个 range() 函数也是个协程。也就是 c++20 里面所谓的对称转移,主贴所讨论的场景。
你在主贴里面实现是两个协程来回切换。
用于驱动各种异步事件的时候,得弄个事件循环协程:
<-> coro1(send)
ev_coro <-> coro2(recv)
<-> coro3(timer)
你主贴的场景和 range() 是:
main <-> range()
这种两个协程切来切去还有个绝佳用途就是编译器:
parser <-> lexer
【 在 allegro 的大作中提到: 】
: c++的coroutine的确有传染问题,所以它有自己受限的使用场景。
: 我的感觉是,这个模型特别适合异步消息驱动模型,因为每个消息的处理都是相对独立的,可以从一个消息的处理函数入口斩断传染。消息驱动会有一个dispatch消息的loop,刚好用来resume挂起的协程。
: 并且消息驱动的核心代码少,需要高效简洁。可以让专业的人,使用传统方式实现和维护。(比方于用户代码和内核代码的区别),而项目的主要部分是消息处理函数,用coroutine来写,逻辑更加清楚。也降低了对程序员的水平要求。
: ...................
--
修改:hgoldfish FROM 110.84.121.*
FROM 110.84.121.*