- 主题:觉得协程不是一个太好的编程模型
本来就是。就是一个交易中间件,算是框架。
业务逻辑算是插件。对框架的任何修改,什么多进程,多线程,协程啥啥的,与它们没有任何关系。任何框架的修改都不会影响业务逻辑。
【 在 VincentGe 的大作中提到: 】
: 到了这一步你认为你还认为你需要你的的业务代码吗?
: 那你还不如设计一个dsl,把业务抽象出来,剩下就是优化你的执行器了
:
: ...................
--
FROM 221.218.60.*
我的意思是,对于你的业务代码,应该尽可能简单,抽象,易于理解,最好符合人的心智模型,业务人员也应该可以理解。
如果你在你的业务代码中混入协程,多线程代码,你的代码会变得非常难以理解,既然如此,你为什么不设计一个dsl,再实现一个执行器,这样,你不就成功实现了业务和实现的解耦?
【 在 ylh1969 的大作中提到: 】
:
: 什么叫业务代码?难道你弄了个协程,就能股票交易啦!
: 交易代码里还得有yield?
: 【 在 VincentGe 的大作中提到: 】
: : 到了这一步你认为你还认为你需要你的的业务代码吗?
#发自zSMTH@CDU.MP
--
FROM 113.143.105.*
额,但两者不是同一个东西,不是吗?
【 在 ylh1969 的大作中提到: 】
:
: 协程,就是执行异步任务的一种手段,一种工具。
: 异步操作同步化就是它的特点。
:
: 【 在 VincentGe 的大作中提到: 】
#发自zSMTH@CDU.MP
--
FROM 113.143.105.*
这个我懂。我写的就是框架,与任何业务无关,写业务逻辑的,根本就不知道什么进程线程协程啥的。
一个哥们甚至在业务逻辑中用全局变量传递上下文,还得我告诉他,这个环境是多线程的。
【 在 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.*
如果一个业务是异步的,那么它的异步是无法消除的。
比如,你向银行发送了一个汇款申请。但是啥时候真的完成汇款,这是异步的。类似的还有网络请求。发送任务,然后等远程执行完毕,再继续本地下一步的动作。这样的场景在 GUI 编程混合网络请求时特别常见。
好了。我们现在再来考虑,要实现异步的业务,应该用哪一种技术呢?
【 在 VincentGe 的大作中提到: 】
: 我的意思是,对于你的业务代码,应该尽可能简单,抽象,易于理解,最好符合人的心智模型,业务人员也应该可以理解。
: 如果你在你的业务代码中混入协程,多线程代码,你的代码会变得非常难以理解,既然如此,你为什么不设计一个dsl,再实现一个执行器,这样,你不就成功实现了业务和实现的解耦?
: #发自zSMTH@CDU.MP
: ...................
--
FROM 39.144.251.*
这就是典型的卖火车票嘛!
选定的车票在数据库被标定为占用,等待你的支付成功的消息,跟线程协程没关系。
倒是支付等待回执,确实是个协程,它仅仅就是调用一个RecvNet(),在有协程之前,它会锁定一个线程,直到银行回复。在改成协程之后,中途会yield,会动用epoll,有回复就会resume,一切是透明的,业务软件没有任何的修改。
【 在 hgoldfish 的大作中提到: 】
: 如果一个业务是异步的,那么它的异步是无法消除的。
: 比如,你向银行发送了一个汇款申请。但是啥时候真的完成汇款,这是异步的。类似的还有网络请求。发送任务,然后等远程执行完毕,再继续本地下一步的动作。这样的场景在 GUI 编程混合网络请求时特别常见。
: 好了。我们现在再来考虑,要实现异步的业务,应该用哪一种技术呢?
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
光实现单线程的,会被人骂
光实现多线程的,也会被人骂
爱用哪种用哪种,不是更好
【 在 VincentGe 的大作中提到: 】
: 不知道回谁
: 不是CPP协程搞晚了,是CPP协程搞得太复杂了。
: 协程一般实现有两种,一种是类似事件循环机制,这个要求必须在单线程内。一种是任务调度模式,这里执行的单位是一个过程,这个由调度器实现执行,它不一定在一个线程内。
: ...................
--
FROM 114.241.228.*
各种callback吧
callback也很麻烦,层次深了没法看
coroutine是不是还需要点时间才能真的跟 thread顶掉pthread 一样呀
【 在 hgoldfish 的大作中提到: 】
: 如果一个业务是异步的,那么它的异步是无法消除的。
: 比如,你向银行发送了一个汇款申请。但是啥时候真的完成汇款,这是异步的。类似的还有网络请求。发送任务,然后等远程执行完毕,再继续本地下一步的动作。这样的场景在 GUI 编程混合网络请求时特别常见。
: 好了。我们现在再来考虑,要实现异步的业务,应该用哪一种技术呢?
: ...................
--
FROM 116.76.169.*
异步一个典型的模型是回调。是不是非常容易的解决了你的问题。
另,GUI编程对数是事件驱动的,没有你这个问题。
异步任务是可以取消的。对于一个无副作用的函数,没有区别。
【 在 hgoldfish 的大作中提到: 】
:
: 如果一个业务是异步的,那么它的异步是无法消除的。
:
: 比如,你向银行发送了一个汇款申请。但是啥时候真的完成汇款,这是异步的。类似的还有网络请求。发送任务,然后等远程执行完毕,再继续本地下一步的动作。这样的场景在 GUI 编程混合网络请求时特别常见。
:
#发自zSMTH@CDU.MP
--
FROM 113.143.105.*