- 主题:觉得协程不是一个太好的编程模型
没错,但是都是理论。实际线程在核间移动,附加的开销忽略不计。线程一般不需要固定核。固定了,反而会造成核间负载不均衡。
【 在 finlab 的大作中提到: 】
: 现在协程流行的原因,还是线程的成本太高。
: 一个是现在的cpu每个核心有独立缓存,一个线程固定分配到一个核心是最好的,如果线程反复随机调度到不同核心,就会导致缓存的效率大幅下降,
: 另一个是操作系统层面,线程是一个比较重的对象,操作系统支持的线程数量上限也不高。
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
一个月?!哥们,1个月哪行呀,4个月!
一天改的代码,在原有线程池基础上,改出协程。一周之内能够稳定运行,不能投产呀!必须进行大量的压力测试,不断发现问题,不断解决问题,最后4个月定稿。
这个就是不用任何轮子的代价吧,因为这个协程必须与原有系统兼容,没办法使用现成的。
举个例子,一个协程,刚刚把自己的context加入epoll,就被另一个线程resume了,这边还没有完成swapcontext呢。发生撞车了(一个协程出现在两个线程),概率很低。怎么解决?
【 在 DoorWay 的大作中提到: 】
: 开发者更容易理解,版面就不会这么多大佬一直在讨论了。
: 我看是更容易一知半解。上手就干。
: 协程好调试是相对什么说的,我觉得是更难调试了。
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
不会有用协程的业务代码。
业务必须是透明的使用协程,看不到的。
比如,把线程池模式改成协程模式,就是底层函数的改变,跟上层没有任何关系。上层是同步调用IO,改完还是同步,里边是否yield,甚至换了线程,业务是不知道的。
所以,要告诉写业务软件的,你的线程锁不能跨越IO,自己想办法。
如,连接池管理,把悲观锁全部改成乐观锁。
【 在 mopo 的大作中提到: 】
: 好不好不知道,反正我编程10多年还真没怎么碰见过直接用协程的业务代码,就算是library也是凤毛麟角,也没出现过做架构和解决方案时非用不可的场景
: 对于并行和并发,实际情况是能把多线程玩好的已经不多了,单线程内做到伪并行也有很多路子,这个我一般交给专业的lib来做不会尝试自己造轮子
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
OK。
因为我是多线程协程,没有现成库可用。其中线程竞争,撞栈这些问题,是单线程协程没有的,所以调试非常困难。
【 在 DoorWay 的大作中提到: 】
: 记住了,前辈。
: 114。1天改,一周稳定,4个月压力测试。
--
FROM 221.218.60.*
说的对。你也承认有多线程协程的需求。
肯定调度器的作用,我在几个帖子里提到了调度器,没人注意。
调度器很难标准化,个性化需求难以满足。
【 在 VincentGe 的大作中提到: 】
: 不知道回谁
: 不是CPP协程搞晚了,是CPP协程搞得太复杂了。
: 协程一般实现有两种,一种是类似事件循环机制,这个要求必须在单线程内。一种是任务调度模式,这里执行的单位是一个过程,这个由调度器实现执行,它不一定在一个线程内。
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
协程,就是执行异步任务的一种手段,一种工具。
异步操作同步化就是它的特点。
【 在 VincentGe 的大作中提到: 】
: 不是,这个就不叫协程了,叫做异步任务
:
: #发自zSMTH@CDU.MP
--
FROM 221.218.60.*
什么叫业务代码?难道你弄了个协程,就能股票交易啦!
交易代码里还得有yield?
【 在 VincentGe 的大作中提到: 】
: 到了这一步你认为你还认为你需要你的的业务代码吗?
: 那你还不如设计一个dsl,把业务抽象出来,剩下就是优化你的执行器了
:
: ...................
--
FROM 221.218.60.*
本来就是。就是一个交易中间件,算是框架。
业务逻辑算是插件。对框架的任何修改,什么多进程,多线程,协程啥啥的,与它们没有任何关系。任何框架的修改都不会影响业务逻辑。
【 在 VincentGe 的大作中提到: 】
: 到了这一步你认为你还认为你需要你的的业务代码吗?
: 那你还不如设计一个dsl,把业务抽象出来,剩下就是优化你的执行器了
:
: ...................
--
FROM 221.218.60.*
这个我懂。我写的就是框架,与任何业务无关,写业务逻辑的,根本就不知道什么进程线程协程啥的。
一个哥们甚至在业务逻辑中用全局变量传递上下文,还得我告诉他,这个环境是多线程的。
【 在 VincentGe 的大作中提到: 】
: 我的意思是,对于你的业务代码,应该尽可能简单,抽象,易于理解,最好符合人的心智模型,业务人员也应该可以理解。
: 如果你在你的业务代码中混入协程,多线程代码,你的代码会变得非常难以理解,既然如此,你为什么不设计一个dsl,再实现一个执行器,这样,你不就成功实现了业务和实现的解耦?
:
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
用协程表达和执行异步任务。一个单词的名词形式和动词形式,是不是一个词你说了算。
我是把ASIO与Coroutine看成一回事。
【 在 VincentGe 的大作中提到: 】
: 额,但两者不是同一个东西,不是吗?
:
: #发自zSMTH@CDU.MP
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*