- 主题:看了网上讲C++20 coroutine的十几篇介绍文章,竟然还是云里雾里
云里雾里有点夸张,但的确没有那种醍醐灌顶的感觉
就没人能从存在的问题,需求, 到实现方案,具体应用串起来
文章一般是告诉你函数要暂停恢复,然后告诉你promise, future, generator
好像就在讲两头,中间深入的点都讲不清楚
--
修改:eematlab FROM 64.207.220.*
FROM 64.207.220.*
coroutine我早懂了, 不懂的是c 的实现细节。
【 在 DoorWay 的大作中提到: 】
:
: coroutine是独立的概念,所以不是看不懂cpp20的coroutine,是看不懂coroutine。
: 看wikepedia的词条有帮助。
:
: 我的理解:你有2个函数,routine1 ,routine2。这俩函数呢,比较变态,
: 都有goto,routine1执行一半,比如做好个蛋糕,goto到 routine2。routine2
: 接力把routine1的蛋糕吃掉,然后再goto到routine1。routine1继续做蛋糕……
:
: 因为是两个routine合作,所以叫coroutine。因为是goto,还在同一线程,所以
: 没有切换开销。上面的例子就是消费者生产者模型。
:
: --
:
发自「今日水木 on PCT-AL10」
--
FROM 101.86.16.*
网络异步编程我用epoll notifyevent实现过, 就是事件加回调。我看不清楚的是c 20里coroutine规范和实现细节, 用一个个没讲清楚的名词来解释另一个名词
【 在 hgoldfish 的大作中提到: 】
:
: 需求就是网络编程。。
:
: 标准委员会生产的那些标准就是垃圾啊。。像我一样把 coroutine 做得跟 thread 一模一样,就很容易理解了。。
:
: scoped_ptr server(Socket: : createServer(QHostAddress: : AnyIPv4, port));
: CoroutineGroup workers;
:
: while (true) {
: shared_ptr request(server.accept());
: if (!request)
: break;
: workers.spawn(\[request\] {
: request->sendall("hello!");
: request->close();
: });
: }
:
: 瞧,跟 thread 一模一样,压根不需要去理解那些 promise, future 什么的。
:
: --
: 灭绝人性啊
:
:
发自「今日水木 on PCT-AL10」
--
FROM 101.86.16.*
等23出网络库吧, 这个才是coroutine最有用的场景
现在网络相关的好像是golang用的比较多吧, C++出来了也不一定能有多少用武之地
【 在 hgoldfish 的大作中提到: 】
: 没有。。所以 c++20 的协程建议大家还不要用。等标准库出事件循环再说,或者有个事实标准出来再说。
:
--
FROM 64.207.220.*