- 主题:C++的异步模型以后就是sender/receiver这个框架了
你直接 benchmark 一下就知道了。
现代 c/c++ 协程库,要么编程语言支持,要么动用汇编才能达到比较好的性能。
【 在 ylh1969 的大作中提到: 】
: 之前有一个说它性能的,是因为里边有一个signal的处理,是一个系统调用,查了一下,这个系统调用不涉及IO,也不涉及锁,应该对性能没大影响。
--
FROM 124.72.109.*
纤切换是纤程切换。事件循环是事件循环。
你一直把两个事情给混起来。
【 在 ylh1969 的大作中提到: 】
: 性能肯定高不了,问题不在ucontext。
: 在这两个函数中,yield需要捜索ucontext,线程锁加锁解锁一次,操作epoll一次,调用好几次各种函数,写日志一大堆。
: resume需要线程锁加锁解锁一次,写一堆日志。
: ...................
--
FROM 120.37.20.*
假如协程方案有 3 种,事件循环也有 3 种,
那一共有 9 种组合。
你为啥认为自己的方案是对的呢?
【 在 ylh1969 的大作中提到: 】
: 这俩结合起来才是完整的透明的异步IO环境。
--
FROM 120.37.20.*
唉,其实我只是想说存在别的对的组合。
你的组合对不对另外说。
关键是存在很多其它的组合啊。
别的组合也是对的。
【 在 ylh1969 的大作中提到: 】
: 我的方法肯定是对的,因为实现了。没说别的方案不对。
: 如果你知道哪种组合不对,可以发出来,给大家避坑。
--
FROM 120.37.22.*
主要是你在说协程切换的时候,经常和协程调度(事件循环)混起来说。
这是两回事。所以我忍不住提醒一下 :-)
【 在 ylh1969 的大作中提到: 】
: 我只是介绍我的成功方案,没有否定别的意思。
: 你有好方案,可以说呀,大家可以自由发言,共同介绍经验和教训。
: 本坛讨论了不少协程和异步方案,但是还没有看到透明方案,我就是介绍一种透明方案。就是让写业务逻辑的,不必了解协程和异步技术,透明的使用这些功能。
: ...................
--
FROM 27.152.110.*
首先,可以不存在事件循环。协程之间自行切换。例子是 generator 模式。我在写编译器的时候,lexer 和 compiler 都是协程,它俩来回切换。
其次,存在没有 io poll 的事件循环。也就是纯粹的 timer 循环。事件循环里面只有 timer 事件,没有其它事件。
最后呢,事件循环不一定用 epoll. windows 下也可以用 iocp, linux 下还有 io_uring 等等。
【 在 ylh1969 的大作中提到: 】
: 这是紧密关联的两件事。协程之所以需要切换,就是因为IO不能顺利完成(或者说,需要等待某种事件)。我一直强调,线程调度,协程调度,核心就是事件循环。我用epoll调度。
--
FROM 27.152.110.*
不是语法糖。我说的也是 c++ 的啊。
我这边有个核心工具,用 c++ 写的 olap 时间序列数据库。它包含一个表达式引擎。
里面的 lexer 和 compiler 就是用两个协程来回切换,没有用到任何事件循环。
【 在 ylh1969 的大作中提到: 】
: 各种事件工具都是可以的。
: 至于你说的语法糖,当然可以用,习惯问题,我看不出来必要性。
: 语法解释,词法分析,我也常用。
: ...................
--
FROM 27.152.110.*