- 主题:终于想明白协程了。
对啊,写多线程的时候从来就不用担心,因为一个线程同一时间只能被一个cpu执行。在cpp的coro现在这个保证没了,只能自己不搞砸。
总的来说就是需要标准库再做点事情,让协程变得更开箱可用一些,就像for while之于if goto一样
【 在 z16166 的大作中提到: 】
: 在加锁上,感觉多线程执行协程可能是个噩梦?
:
: 如果A1,A2,...,An这些协程都可能在t1,t2,...,tn这些线程上执行,那么访问共享资源时直接无脑全部加锁就行,
: ....................
- 来自「最水木 for iPhone12,8」
--
FROM 75.31.75.*
这个C++20标准下的协程恢复线程不确定。
如果协程上下文都refer了某个tls,那么await前后看到的tls实际上可能是不同的变量。
虽然名字相同,代码就隔了一个await,但执行起来千差万别,这对用户来说是真·天坑。
而且协程可以挂起后在await_suspend()中让另一个线程立刻启动协程,使得当前this可能被立即销毁。
这对库的编写者也是大坑,不过普通用户不用关切这个。
看了这么些文档,我对那个cppcoro的event设计比较喜欢
无锁无风险,算是赏心悦目。比condition_variable好用多了。
【 在 z16166 的大作中提到: 】
: 在加锁上,感觉多线程执行协程可能是个噩梦?
: 如果A1,A2,...,An这些协程都可能在t1,t2,...,tn这些线程上执行,那么访问共享资源时直接无脑全部加锁就行,
: 怕的就是一组协程G1在一个线程t1上执行,而另外一组协程G2在另外一个不同的线程t2上执行,G1和G2这两个协程组之间访问共享资源时需要加锁,协程组内的资源不需要加锁。
: ...................
--
修改:allegro FROM 158.140.1.*
FROM 158.140.1.*
老什么老,你理解不了协程就是因为你不够老。
当年windows3.x时代有个名词,叫协同式多任务,
到了win95又有个词,叫抢占式多任务。
win95发布的时候,把抢占式多任务作为重要卖点之一大肆渲染,把协同式多任务说的一文不值。
现在大家都知道,所谓的抢占式多任务就是线程/进程
20多年后,历史又回到了原点,这次协同式多任务有了个nb闪闪的新名字:协程。
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
: 我当年毕业的时候,多线程还不普及,我狠下功夫研究了IOCP以及EPOLL,当时的EPOLL都还没有正式进入LINUX内核,需要自己编译内核来支持。整个公司的一套通讯平台底层基础库就是我封装的,对业务层提供统一接口,底层分别支持IOCP和EPOLL(和ASIO一个思想),我当时对多线程和SOCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: 现在遇到协程,我发现我也死活理解不了这玩意儿,不由得哀叹自己老了。但是突然有一天一下子明白了,协程和线程核心区别其实就是:线程是内核创建并调度的,内核根据算法来pause/resume某个线程,线程中的代码随时都可能被内核pause,过一会儿又回来从之前pause的地方接着执行,programmer 不用管什么时候代码被暂停执行,什么时候被恢复执行。
: ...................
--
修改:lvsoft FROM 180.158.50.*
FROM 180.158.50.*
所以涉及同一数据要在同一个线程上执行,免掉锁的烦恼
【 在 z16166 的大作中提到: 】
: 在加锁上,感觉多线程执行协程可能是个噩梦?
: 如果A1,A2,...,An这些协程都可能在t1,t2,...,tn这些线程上执行,那么访问共享资源时直接无脑全部加锁就行,
: 怕的就是一组协程G1在一个线程t1上执行,而另外一组协程G2在另外一个不同的线程t2上执行,G1和G2这两个协程组之间访问共享资源时需要加锁,协程组内的资源不需要加锁。
: ...................
--
FROM 162.156.156.*
是挺好用,我是用ASIO+协程,可惜还用不了C++20的协程语法。
C++20标准通过了吗?
【 在 hgoldfish 的大作中提到: 】
: 因为 c++20 加了协程吧。。
: 不过这东东用了真是会上瘾。
: 我用协程 + Qt 写网络程序的客户端。比以前方便清晰了很多。
: ...................
--
FROM 175.42.42.*
re
【 在 lvsoft 的大作中提到: 】
: 老什么老,你理解不了协程就是因为你不够老。
:
: 当年windows3.x时代有个名词,叫协同式多任务,
: ....................
- 来自「最水木 for iPhone SE」
--
FROM 114.85.150.*
我还以为只有我读什么忘什么
【 在 libgcc 的大作中提到: 】
:
: 协程的理念不难懂,就是c++20的接口有点难懂
:
: 我看了2遍,每次好不容易看懂了,又不用,过2天又忘记了
: 【 在 speedboy2998 的大作中提到: 】
#发自zSMTH@ELE-AL00
--
FROM 117.136.38.*
这个就叫专业
【 在 lvsoft 的大作中提到: 】
: 老什么老,你理解不了协程就是因为你不够老。
: 当年windows3.x时代有个名词,叫协同式多任务,
: 到了win95又有个词,叫抢占式多任务。
: ...................
--
FROM 1.202.62.*
古老的手机操作系统里,多任务的调度好像就类似协程,是应用层来调度的
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
:
--
FROM 123.125.37.*
【 在 z16166 的大作中提到: 】
: 在加锁上,感觉多线程执行协程可能是个噩梦?
: 如果A1,A2,...,An这些协程都可能在t1,t2,...,tn这些线程上执行,那么访问共享资源时直接无脑全部加锁就行,
: 怕的就是一组协程G1在一个线程t1上执行,而另外一组协程G2在另外一个不同的线程t2上执行,G1和G2这两个协程组之间访问共享资源时需要加锁,协程组内的资源不需要加锁。
: ...................
协程安全,线程锁不得跨越yield。
--
FROM 221.221.53.*