- 主题:c/c++的开发人员是不是越来越少了?
当然。
我是用在服务器端的,结合epoll,在需要等待接收时才需要coroutine。
【 在 hgoldfish 的大作中提到: 】
: 单纯的 coroutine 没什么用。建议你看看其它语言,比如 python, rust, go 对 corotuine 的使用。在 coroutine 上面还有很多内容要做。比如事件循环和 coroutine 之间的通讯 lock, event, queue 等等。
: 单纯的 corotuine 有个地方很好用,就是模拟 python 和 javascript 的 yield:
: void range(shared_ptr<int> value, coroutine *main)
: ...................
--
FROM 221.221.52.*
c提供的这套context族接口是很多coroutine实现的底层,比如云风版的;但像微信的libco,其上下文操作都要用汇编去搞;cpp计划提供的execution野心要大很多
【 在 ylh1969 的大作中提到: 】
:
: 本人玩纯C的coroutine,感觉还不错。
: getcontext();之类的
: --
:
发自「今日水木 on iPad 6Gen」
--
FROM 1.202.62.*
getcontext,setcontext这两个函数是汇编的。使用者不需要汇编。
【 在 beijing2duck 的大作中提到: 】
: c提供的这套context族接口是很多coroutine实现的底层,比如云风版的;但像微信的libco,其上下文操作都要用汇编去搞;cpp计划提供的execution野心要大很多
: 发自「今日水木 on iPad 6Gen」
--
FROM 221.221.52.*
yield要自己写。我的是结合epoll的:
int yield(int fd,int mode);
mode:读或写。
里边查找线程id,设置epoll,然后,swapcontext()
之后,线程放弃这个context,进行epoll_wait()
epoll收到信号,激活这个线程,进行setcontext返回。
进行后续的读写任务。
一个线程可以伺候很多的fd。
【 在 hgoldfish 的大作中提到: 】
: 单纯的 coroutine 没什么用。建议你看看其它语言,比如 python, rust, go 对 corotuine 的使用。在 coroutine 上面还有很多内容要做。比如事件循环和 coroutine 之间的通讯 lock, event, queue 等等。
: 单纯的 corotuine 有个地方很好用,就是模拟 python 和 javascript 的 yield:
: void range(shared_ptr<int> value, coroutine *main)
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
你好像还是没理解我说的啊。。
你实现的 coroutine 现在 cpp 已经标准库自带了。你最多再加了一个事件循环。
但根本不够用。需要 lock, event 这些也得实现一下。
【 在 ylh1969 (没谱) 的大作中提到: 】
: 当然。
: 我是用在服务器端的,结合epoll,在需要等待接收时才需要coroutine。
--
FROM 112.47.122.*
我知道。你说的很对。
不管哪个平台,都需要自己包个事件。
锁的问题,比较复杂,哪个平台提供了协程锁?
【 在 hgoldfish 的大作中提到: 】
: 你好像还是没理解我说的啊。。
: 你实现的 coroutine 现在 cpp 已经标准库自带了。你最多再加了一个事件循环。
: 但根本不够用。需要 lock, event 这些也得实现一下。
: ...................
--
FROM 221.221.52.*
每个场合event都不同,所以必须自己包。
我只看出异步IO需要协程。
【 在 hgoldfish 的大作中提到: 】
: 你好像还是没理解我说的啊。。
: 你实现的 coroutine 现在 cpp 已经标准库自带了。你最多再加了一个事件循环。
: 但根本不够用。需要 lock, event 这些也得实现一下。
: ...................
--
FROM 221.221.52.*
python 有协程锁啊。go 的话有 channel 可以通信。总之协程之间也是需要协调的。
举个例子:
同时向三个后端服务器发送请求,任何一条成功则继续。
你打算怎么弄。
【 在 ylh1969 (没谱) 的大作中提到: 】
: 我知道。你说的很对。
: 不管哪个平台,都需要自己包个事件。
: 锁的问题,比较复杂,哪个平台提供了协程锁?
: ...................
--
FROM 110.85.22.*
是的协程锁我搞不定。
【 在 hgoldfish 的大作中提到: 】
: python 有协程锁啊。go 的话有 channel 可以通信。总之协程之间也是需要协调的。
: 举个例子:
: 同时向三个后端服务器发送请求,任何一条成功则继续。
: ...................
--
FROM 221.221.53.*
这个功能实现了,没用协程锁。
【 在 hgoldfish 的大作中提到: 】
: python 有协程锁啊。go 的话有 channel 可以通信。总之协程之间也是需要协调的。
: 举个例子:
: 同时向三个后端服务器发送请求,任何一条成功则继续。
: ...................
--
FROM 221.221.53.*