- 主题:觉得协程不是一个太好的编程模型
- 不知道回谁
 不是CPP协程搞晚了,是CPP协程搞得太复杂了。
 协程一般实现有两种,一种是类似事件循环机制,这个要求必须在单线程内。一种是任务调度模式,这里执行的单位是一个过程,这个由调度器实现执行,它不一定在一个线程内。
 问题在于CPP的实现同时实现了这两点。
 
 【 在 z16166 的大作中提到: 】
 :
 : 主要还是C++的协程规范搞得晚了,别的语言都用了多久了,而且是大规模使用,肯定可以积累好的实践和规范。
 :
 : 乱搞那肯定是没法维护的,就跟乱throw、乱catch异常一样
 :
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- Python 那个asyncio太差劲了
 
 【 在 hgoldfish 的大作中提到: 】
 :
 : Python 那边就没人讨论这些。
 :
 : 你见过有人讨论 Python yield 的使用吗?但 yield 其实就是协程的一种应用。
 :
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 到了这一步你认为你还认为你需要你的的业务代码吗?
 那你还不如设计一个dsl,把业务抽象出来,剩下就是优化你的执行器了
 
 【 在 ylh1969 的大作中提到: 】
 :
 : 不会有用协程的业务代码。
 : 业务必须是透明的使用协程,看不到的。
 : 比如,把线程池模式改成协程模式,就是底层函数的改变,跟上层没有任何关系。上层是同步调用IO,改完还是同步,里边是否yield,甚至换了线程,业务是不知道的。
 : 所以,要告诉写业务软件的,你的线程锁不能跨越IO,自己想办法。
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 不是,这个就不叫协程了,叫做异步任务
 
 【 在 ylh1969 的大作中提到: 】
 :
 : 说的对。你也承认有多线程协程的需求。
 : 肯定调度器的作用,我在几个帖子里提到了调度器,没人注意。
 : 【 在 VincentGe 的大作中提到: 】
 : : 不知道回谁
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 我的意思是,对于你的业务代码,应该尽可能简单,抽象,易于理解,最好符合人的心智模型,业务人员也应该可以理解。
 如果你在你的业务代码中混入协程,多线程代码,你的代码会变得非常难以理解,既然如此,你为什么不设计一个dsl,再实现一个执行器,这样,你不就成功实现了业务和实现的解耦?
 
 【 在 ylh1969 的大作中提到: 】
 :
 : 什么叫业务代码?难道你弄了个协程,就能股票交易啦!
 : 交易代码里还得有yield?
 : 【 在 VincentGe 的大作中提到: 】
 : : 到了这一步你认为你还认为你需要你的的业务代码吗?
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 额,但两者不是同一个东西,不是吗?
 
 【 在 ylh1969 的大作中提到: 】
 :
 : 协程,就是执行异步任务的一种手段,一种工具。
 : 异步操作同步化就是它的特点。
 :
 : 【 在 VincentGe 的大作中提到: 】
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 异步一个典型的模型是回调。是不是非常容易的解决了你的问题。
 另,GUI编程对数是事件驱动的,没有你这个问题。
 异步任务是可以取消的。对于一个无副作用的函数,没有区别。
 
 【 在 hgoldfish 的大作中提到: 】
 :
 : 如果一个业务是异步的,那么它的异步是无法消除的。
 :
 : 比如,你向银行发送了一个汇款申请。但是啥时候真的完成汇款,这是异步的。类似的还有网络请求。发送任务,然后等远程执行完毕,再继续本地下一步的动作。这样的场景在 GUI 编程混合网络请求时特别常见。
 :
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 这个循环本身就是就是 事件循环 ,从本质而言,就是异步模型,但表现上,是同步代码。
 
 我刚刚看了eventlet-pyqt库,在最新的qt6.8中,pyqt是可以使用异步的。
 
 
 【 在 hgoldfish 的大作中提到: 】
 :
 : 以前 DOS GUI 编程的时代可不是啥事件驱动的。while (true) 循环检测是否被按下了某个按键。现在可以被替换成 await key-pressed-event;
 :
 : 我专门弄了一个 eventlet-pyqt 的开源库,还有个 qtng 的开源库。都是为了在 GUI 里面做协程开发。破除了 GUI 编程是异步的这种思维误区。
 :
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 对于你后面的说的,协程实质上有两种看法,对应我前面说的部分
 
 有人认为协程就是一个local的事件循环,她提供了一个单线程内的同步模型,这个就是所谓的用户线程
 
 有人认为协程是一个抽象的task调度器,使得任务在多个线程内并行。
 
 对于这两种,CPP的协程都实现了。于是,它被混用了。
 
 我个人是赞同第一种看法,因为这个模型足够简单。对于第二种,实际上我们完全可以通过第一种实现(线程池+事件循环+某种类似队列的通信机制)
 
 我个人让为,协程,异步这两个概念是完全不同的东西,需要澄清。
 
 【 在 hgoldfish 的大作中提到: 】
 :
 : 以前 DOS GUI 编程的时代可不是啥事件驱动的。while (true) 循环检测是否被按下了某个按键。现在可以被替换成 await key-pressed-event;
 :
 : 我专门弄了一个 eventlet-pyqt 的开源库,还有个 qtng 的开源库。都是为了在 GUI 里面做协程开发。破除了 GUI 编程是异步的这种思维误区。
 :
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*
 
- 其实也算
 协程是语言层面的,和线程的比较只能说大部分情况下,协程是并发,线程是并行
 其实你说的这个更对应异步任务的概念,这里线程是一个调度器。
 
 我提一个这个需求,以表达区别,我需要临时在一个线程内实现并发性IO操作,这个线程是线程池的一部分,请问,该怎么实现?
 
 【 在 hgoldfish 的大作中提到: 】
 :
 : 给你一个概念辨析:
 :
 : 协程和纤程是啥关系?
 :
 
 #发自zSMTH@CDU.MP
 --
 FROM 113.143.105.*