- 主题:觉得协程不是一个太好的编程模型
假定这个是在手机客户端的工作。
那么在手机客户端里面就可以启动一个协程。去监听付款成功的事件。然后弹出提示或者指示用户做下一步的操作。
而你这种做个标志立即返回的想法,就是传统的实现方式。
所以,协程适用于所有的异步业务场景。但具体要不要采用是另外的事情。
【 在 ylh1969 的大作中提到: 】
: 这就是典型的卖火车票嘛!
: 选定的车票在数据库被标定为占用,等待你的支付成功的消息,跟线程协程没关系。
: 倒是支付等待回执,确实是个协程,它仅仅就是调用一个RecvNet(),
: ...................
--
FROM 39.144.251.*
确实如此。所以这个世界才会分出多种编程语言。
【 在 z16166 的大作中提到: 】
: 光实现单线程的,会被人骂
: 光实现多线程的,也会被人骂
: 爱用哪种用哪种,不是更好
: ...................
--
FROM 39.144.251.*
协程避免了callback。
我记得callback是叫continueation模式。
【 在 overcomeunic 的大作中提到: 】
: 各种callback吧
: callback也很麻烦,层次深了没法看
: coroutine是不是还需要点时间才能真的跟 thread顶掉pthread 一样呀
--
FROM 221.218.60.*
以前 DOS GUI 编程的时代可不是啥事件驱动的。while (true) 循环检测是否被按下了某个按键。现在可以被替换成 await key-pressed-event;
我专门弄了一个 eventlet-pyqt 的开源库,还有个 qtng 的开源库。都是为了在 GUI 里面做协程开发。破除了 GUI 编程是异步的这种思维误区。
所有的异步场景都是协程的应用场景。
协程是一种异步函数调用。这是一种抽象。至于用纤程、线程还是进程来实现是不重要的细节。
事实上,c++ 里面可以用 async/await 语法实现一种协程,任务每次都被派发到线程池里面去异步执行。在这种情况下,就根本不使用啥“用户线程“、”纤程“、”绿线程“。
【 在 VincentGe 的大作中提到: 】
: 异步一个典型的模型是回调。是不是非常容易的解决了你的问题。
: 另,GUI编程对数是事件驱动的,没有你这个问题。
: 异步任务是可以取消的。对于一个无副作用的函数,没有区别。
: ...................
--
FROM 39.144.251.*
这个循环本身就是就是 事件循环 ,从本质而言,就是异步模型,但表现上,是同步代码。
我刚刚看了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.*
原来 PySide 和 PyQt 也搞了 asyncio 的模块了啊。我很久不写 pyqt 都不知道。
不过也证明了我十几年前搞的这个 eventlet-pyqt 的先进性哈哈。
你说的是没错的。不管事件循环是单独的还是 while(1) 嵌入到具体的流程里面。都是把异步的事件写成同步的代码。
所以在本系列的帖子里面,大家看到了协程的各种表现形式。这背后有统一的指导思想。
【 在 VincentGe 的大作中提到: 】
: 这个循环本身就是就是 事件循环 ,从本质而言,就是异步模型,但表现上,是同步代码。
: 我刚刚看了eventlet-pyqt库,在最新的qt6.8中,pyqt是可以使用异步的。
: #发自zSMTH@CDU.MP
: ...................
--
FROM 39.144.251.*
给你一个概念辨析:
协程和纤程是啥关系?
c# 代码里面写`await 任务;`会把`任务`丢到线程池去执行,算不算协程?
【 在 VincentGe 的大作中提到: 】
: 对于你后面的说的,协程实质上有两种看法,对应我前面说的部分
: 有人认为协程就是一个local的事件循环,她提供了一个单线程内的同步模型,这个就是所谓的用户线程
: 有人认为协程是一个抽象的task调度器,使得任务在多个线程内并行。
: ...................
--
修改:hgoldfish FROM 39.144.251.*
FROM 39.144.251.*
其实也算
协程是语言层面的,和线程的比较只能说大部分情况下,协程是并发,线程是并行
其实你说的这个更对应异步任务的概念,这里线程是一个调度器。
我提一个这个需求,以表达区别,我需要临时在一个线程内实现并发性IO操作,这个线程是线程池的一部分,请问,该怎么实现?
【 在 hgoldfish 的大作中提到: 】
:
: 给你一个概念辨析:
:
: 协程和纤程是啥关系?
:
#发自zSMTH@CDU.MP
--
FROM 113.143.105.*
go语言目前好找工作吗?
【 在 finlab (挨踢卢瑟) 的大作中提到: 】
: 协程很多场合是为了节省线程切换的成本,提高cpu的利用率。
:
: 但是经常把一个事情劈成两半,绕了半天还是要再捏到一起。
:
--
FROM 123.123.41.*