- 主题:c/c++的开发人员是不是越来越少了?
c#的
var t1 = send1Async();
var t2 = send2Async();
var t3 = send3Async();
_ =Task.WhenAny(t1, t2, t3);
函数原型
async Task send1Async();
如此简单,为什么会觉得这个是问题?
【 在 hgoldfish 的大作中提到: 】
: python 有协程锁啊。go 的话有 channel 可以通信。总之协程之间也是需要协调的。
: 举个例子:
: 同时向三个后端服务器发送请求,任何一条成功则继续。
: ...................
--
修改:leadu FROM 123.116.196.*
FROM 123.116.196.*
这个是不是你前几天在CM版吞吞吐吐想说的那个?
这个哪里是协程,明明是yield。
协程代表用户态线程,没有规定必须要在一个线程上执行
【 在 hgoldfish 的大作中提到: 】
: 有的。我举个栗子。
: 比如经典的有两个内存里的帐户 A 和 B,一个协程从 A 转帐给 B,另一个协程从 B 转帐给 A,如果是线程,那需要对这两个帐号加锁,让操作串行化。而协程天然是串行化的,在这里不需要加锁。
: 但是考虑上面那个转钱的动作,加和减都是网络操作。在 A-money 的时候,阻塞住了,另一个协程正在执行 A+money,此时仍然需要加锁。
: ...................
--
FROM 123.116.196.*
常见同步原语都可以用于协程,另外协程也有本身的锁,用于释放执行当前协程的线程,提升吞吐。不过不少语言的二代协程属于刚刚萌芽状态,没有就是了
https://github.com/microsoft/vs-threading
https://github.com/StephenCleary/AsyncEx
【 在 ylh1969 的大作中提到: 】
: 我知道。你说的很对。
: 不管哪个平台,都需要自己包个事件。
: 锁的问题,比较复杂,哪个平台提供了协程锁?
: ...................
--
FROM 123.116.196.*
这种方案的话,协程锁的开销比较大。我之前也考虑过这种方案。你前面也说过,可能不太适合有复杂交互的。
go 语言其实也是你这种方案,所以需要引入 channel 这个东东。使用所谓的 CSP 模型,和所谓的 ACTOR 方案差不多,而不是开销巨大的锁模型。
总之我觉得一定要有协程间同步,不然不够用。
【 在 ylh1969 (没谱) 的大作中提到: 】
: 我的方案是多线程协程,协程在线程间跳来跳去。
: 线程也在协程间跳来跳去。
: 线程池+每连接一个协程。
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
是啊。本来就很简单。最简单的实现只要不到三百行的代码。
但这就是同步模型啊。
【 在 leadu (leadu) 的大作中提到: 】
: c#的
: var t1 = send1Async();
: var t2 = send2Async();
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
明确指定在哪个线程上执行和不明确指定在哪个线程上执行。都是协程实现的方案。各有优劣。不能说一个实现好一个实现差——除了 JS 实现确实是垃圾。
你的问题是只知道优,不知道劣。或者说,不够准确理解劣在哪。协程你算是入了门,但不算精通。
【 在 leadu (leadu) 的大作中提到: 】
: 这个是不是你前几天在CM版吞吞吐吐想说的那个?
: 这个哪里是协程,明明是yield。
: 协程代表用户态线程,没有规定必须要在一个线程上执行
: ...................
--
FROM 112.47.122.*
只会c的貌似拿不了很高的工资吧。
【 在 tianzong 的大作中提到: 】
: 我也只会c啊
--
FROM 183.221.18.*
刚想起来,有一个signalfd的东西。
可以用这个把事件带到epoll处理,解决多线程协程锁。
【 在 hgoldfish 的大作中提到: 】
: 这种方案的话,协程锁的开销比较大。我之前也考虑过这种方案。你前面也说过,可能不太适合有复杂交互的。
: go 语言其实也是你这种方案,所以需要引入 channel 这个东东。使用所谓的 CSP 模型,和所谓的 ACTOR 方案差不多,而不是开销巨大的锁模型。
: 总之我觉得一定要有协程间同步,不然不够用。
: ...................
--
FROM 221.221.50.*
以前有个比较有名的actor的叫libtheron,不过作者已经不维护了。现在大家都用caf。
我以前实现过一个actor模型,只用uint64_t做邮箱地址。actor模型的优点是结构简单,完全不会出现死锁。
一个人业余单打独斗,能轻松搞定10W+行的project。
我感觉得到的缺点:
1.硬性把逻辑拆分配成消息模式。
2.actor模型不太符合类的继承模式。
3.消息模式下连续逻辑实现有困难,不过coroutine刚好可以克服。
【 在 hgoldfish 的大作中提到: 】
: 这种方案的话,协程锁的开销比较大。我之前也考虑过这种方案。你前面也说过,可能不太适合有复杂交互的。
: go 语言其实也是你这种方案,所以需要引入 channel 这个东东。使用所谓的 CSP 模型,和所谓的 ACTOR 方案差不多,而不是开销巨大的锁模型。
: 总之我觉得一定要有协程间同步,不然不够用。
: ...................
--
FROM 158.140.1.*
当前c++协程不要求绑定线程,并且貌似有意设计成跨线程执行。
我感觉协程里面访问thread_local都会是个巨坑。
【 在 hgoldfish 的大作中提到: 】
: 明确指定在哪个线程上执行和不明确指定在哪个线程上执行。都是协程实现的方案。各有优劣。不能说一个实现好一个实现差——除了 JS 实现确实是垃圾。
: 你的问题是只知道优,不知道劣。或者说,不够准确理解劣在哪。协程你算是入了门,但不算精通。
:
--
FROM 158.140.1.*