- 主题:c/c++的开发人员是不是越来越少了?
学呗。不过C++越来越不像C了。
【 在 flyren911 的大作中提到: 】
: c和c++一定要放一起吗?只会c不会c++,感觉会c++的都是大神。
--
FROM 221.221.52.*
C的倒是很容易掌握。
就4个函数。
【 在 allegro 的大作中提到: 】
: coroutine出来后再劝退一波人,余自学c++以来,感觉c++下的coroutine是最难掌握的东西了。
--
FROM 221.221.51.*
本人玩纯C的coroutine,感觉还不错。
getcontext();之类的
【 在 beijing2duck 的大作中提到: 】
: coroutine还没弄全,这是个基础工作,它上面建起的高楼大厦才是台前的表演者。
--
FROM 221.221.52.*
当然。
我是用在服务器端的,结合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.*
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.*
我知道。你说的很对。
不管哪个平台,都需要自己包个事件。
锁的问题,比较复杂,哪个平台提供了协程锁?
【 在 hgoldfish 的大作中提到: 】
: 你好像还是没理解我说的啊。。
: 你实现的 coroutine 现在 cpp 已经标准库自带了。你最多再加了一个事件循环。
: 但根本不够用。需要 lock, event 这些也得实现一下。
: ...................
--
FROM 221.221.52.*
每个场合event都不同,所以必须自己包。
我只看出异步IO需要协程。
【 在 hgoldfish 的大作中提到: 】
: 你好像还是没理解我说的啊。。
: 你实现的 coroutine 现在 cpp 已经标准库自带了。你最多再加了一个事件循环。
: 但根本不够用。需要 lock, event 这些也得实现一下。
: ...................
--
FROM 221.221.52.*
是的协程锁我搞不定。
【 在 hgoldfish 的大作中提到: 】
: python 有协程锁啊。go 的话有 channel 可以通信。总之协程之间也是需要协调的。
: 举个例子:
: 同时向三个后端服务器发送请求,任何一条成功则继续。
: ...................
--
FROM 221.221.53.*
这个功能实现了,没用协程锁。
【 在 hgoldfish 的大作中提到: 】
: python 有协程锁啊。go 的话有 channel 可以通信。总之协程之间也是需要协调的。
: 举个例子:
: 同时向三个后端服务器发送请求,任何一条成功则继续。
: ...................
--
FROM 221.221.53.*