- 主题:C++的异步模型以后就是sender/receiver这个框架了
这俩结合起来才是完整的透明的异步IO环境。
【 在 hgoldfish 的大作中提到: 】
: 纤切换是纤程切换。事件循环是事件循环。
: 你一直把两个事情给混起来。
:
--
FROM 221.218.61.*
假如协程方案有 3 种,事件循环也有 3 种,
那一共有 9 种组合。
你为啥认为自己的方案是对的呢?
【 在 ylh1969 的大作中提到: 】
: 这俩结合起来才是完整的透明的异步IO环境。
--
FROM 120.37.20.*
我的方法肯定是对的,因为实现了。没说别的方案不对。
如果你知道哪种组合不对,可以发出来,给大家避坑。
【 在 hgoldfish 的大作中提到: 】
: 假如协程方案有 3 种,事件循环也有 3 种,
: 那一共有 9 种组合。
: 你为啥认为自己的方案是对的呢?
: ...................
--
FROM 221.218.61.*
我可以报告一个,select不好,
一个原因是只支持1536以内的fd。
2,只支持一个线程守候,其他线程想加入fd,并且立即生效,能做,挺复杂。
3,找到激活的fd以后,还要找关联的context。
然后还要经过一个队列分发给其他线程。
切换协程太费劲了。
【 在 hgoldfish 的大作中提到: 】
: 假如协程方案有 3 种,事件循环也有 3 种,
: 那一共有 9 种组合。
: 你为啥认为自己的方案是对的呢?
: ...................
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
唉,其实我只是想说存在别的对的组合。
你的组合对不对另外说。
关键是存在很多其它的组合啊。
别的组合也是对的。
【 在 ylh1969 的大作中提到: 】
: 我的方法肯定是对的,因为实现了。没说别的方案不对。
: 如果你知道哪种组合不对,可以发出来,给大家避坑。
--
FROM 120.37.22.*
我只是介绍我的成功方案,没有否定别的意思。
你有好方案,可以说呀,大家可以自由发言,共同介绍经验和教训。
本坛讨论了不少协程和异步方案,但是还没有看到透明方案,我就是介绍一种透明方案。就是让写业务逻辑的,不必了解协程和异步技术,透明的使用这些功能。
主要模块是AIO_socket,AIO_file。还有一个AIO_sleep,还没写出来。
前缀应该是ASIO_,同步异步两用。协程环境异步,否则同步。
都是库模块,调用其函数即可。协程和事件循环都被封装在函数里,外边看不见。
函数代码很简单,复杂的是建立协程环境。
【 在 hgoldfish 的大作中提到: 】
: 唉,其实我只是想说存在别的对的组合。
: 你的组合对不对另外说。
: 关键是存在很多其它的组合啊。
: ...................
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
主要是你在说协程切换的时候,经常和协程调度(事件循环)混起来说。
这是两回事。所以我忍不住提醒一下 :-)
【 在 ylh1969 的大作中提到: 】
: 我只是介绍我的成功方案,没有否定别的意思。
: 你有好方案,可以说呀,大家可以自由发言,共同介绍经验和教训。
: 本坛讨论了不少协程和异步方案,但是还没有看到透明方案,我就是介绍一种透明方案。就是让写业务逻辑的,不必了解协程和异步技术,透明的使用这些功能。
: ...................
--
FROM 27.152.110.*
确实,我的协程切换就是跟事件循环紧密捆绑。
你们谈论的协程,怎么与事件捆绑,我百思不得其解。
我看不出来,不是为了等待某种事件,为何要切换。
【 在 hgoldfish 的大作中提到: 】
: 主要是你在说协程切换的时候,经常和协程调度(事件循环)混起来说。
: 这是两回事。所以我忍不住提醒一下 :-)
:
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
这是紧密关联的两件事。协程之所以需要切换,就是因为IO不能顺利完成(或者说,需要等待某种事件)。我一直强调,线程调度,协程调度,核心就是事件循环。我用epoll调度。
【 在 hgoldfish 的大作中提到: 】
: 主要是你在说协程切换的时候,经常和协程调度(事件循环)混起来说。
: 这是两回事。所以我忍不住提醒一下 :-)
:
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
首先,可以不存在事件循环。协程之间自行切换。例子是 generator 模式。我在写编译器的时候,lexer 和 compiler 都是协程,它俩来回切换。
其次,存在没有 io poll 的事件循环。也就是纯粹的 timer 循环。事件循环里面只有 timer 事件,没有其它事件。
最后呢,事件循环不一定用 epoll. windows 下也可以用 iocp, linux 下还有 io_uring 等等。
【 在 ylh1969 的大作中提到: 】
: 这是紧密关联的两件事。协程之所以需要切换,就是因为IO不能顺利完成(或者说,需要等待某种事件)。我一直强调,线程调度,协程调度,核心就是事件循环。我用epoll调度。
--
FROM 27.152.110.*