- 主题:觉得协程不是一个太好的编程模型
一般情况并不需要协程。
只有异步IO时,将它表达为同步,才需要。
简单点,在线程池网络编程中,长时间的同步IO,占用线程时间太长,影响别的任务。在等待IO期间,释放线程,由一个协程等待IO。
对于单线程协程,可以理解为只有一个线程的线程池,如果需要处理很多的连接,协程是必须的。
看起来是一个read函数,返回时已经完成了IO,就是同步过程。其实中途线程跑掉了,干别的去了。
【 在 finlab 的大作中提到: 】
: 协程很多场合是为了节省线程切换的成本,提高cpu的利用率。
: 但是经常把一个事情劈成两半,绕了半天还是要再捏到一起。
: 既然协程这么流行,那就不如在cpu和操作系统、编译器层面进行优化,
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
普通系统对性能的需求,没必要纠结这点切换的差异。
【 在 finlab 的大作中提到: 】
: 协程很多场合是为了节省线程切换的成本,提高cpu的利用率。
: 但是经常把一个事情劈成两半,绕了半天还是要再捏到一起。
: 既然协程这么流行,那就不如在cpu和操作系统、编译器层面进行优化,
: ...................
--
FROM 221.218.60.*
错。
协程缺乏锁机制会出很多问题。
有人给协程写锁。
见2楼,多线程协程,有一个线程锁不允许跨越IO的要求。
单线程协程不使用线程锁,但是需要协程间互斥,就要自己想办法。
还有一种,协程组在一个线程,此外还有其他线程协同工作,互相间互斥,也是禁止线程锁跨越IO。
【 在 poocp 的大作中提到: 】
: 有时候不方便用多线程锁,用协程更容易写出可靠的代码。
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
多线程是可以利用多核性能的,单线程,再多的协程,也只用到一个核。
【 在 poocp 的大作中提到: 】
: 你说了半天,这些问题还是多线程带来的啊。
:
--
FROM 221.218.60.*
这个不同意你,回头再说。
【 在 hgoldfish 的大作中提到: 】
: 你这个理解也还是错误。
: 你那套协程之所以需要锁是因为你实现的纤程会被调度到多个线程。
: 但是协程也可以实现为不自由调度的。当时每个协程非常确定性的在一个线程里面运行。只能跑单核。
: ...................
--
FROM 221.218.60.*
进程是跨不了,但是线程与协程没有绑定关系
。
即使单线程协程,也不能用线程锁,因为都在一个线程里,锁不住。
【 在 VincentGe 的大作中提到: 】
: 错
: 协程允许有锁,你这个锁的本质让一块代码是原子的,可以非常轻易的实现。
: 剩下的是实现问题,协程设计上就不应该允许跨线程进程。
: ...................
--
FROM 221.218.60.*
见10楼,最后一句。
而且,我就是在多线程模型中,有了协程需求。
整个系统是个线程池的socket服务器。
在长IO时,为数不多的线程都在等待IO。还有许多连接在等待线程。
这时候,我们需要每个连接一个协程,需要等待什么事件,让协程等待,yield线程,让他为别人服务。
【 在 VincentGe 的大作中提到: 】
: 这个复杂性在我看来更多是使用者带来的。
: 你难道要在一个协程中使用多线程模型吗?
:
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
多进程多线程本身挺好的,可以充分利用多核进行并行计算。
我们是先设计了多进程多线程的,高并发的服务器,后来需要的协程。
百度一下C10K。
本版搜一下:c++什么时候能提供协程版的读写socket
【 在 VincentGe 的大作中提到: 】
: 那你大概是错误理解协程了,协程给你的是单进程单线程的并发模型。如何你要用对核,用多进程多线程模型。
: 在我看来,现在多进程线程模型的实现本身就不好。
:
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
所以,多线程协程才有意义。
协程在线程间自由调度才有效率。
就如楼主所言,一方面在乎线程调度与协程调度那一点点时间差异,另一方面放着大量的核不用,或者不充分使用,是不是舍本求末了?
【 在 finlab 的大作中提到: 】
: 放着那么多核不用,难道只在一个核上死磕吗?
:
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
本版搜一下:c++什么时候能提供协程版的读写socket
【 在 finlab 的大作中提到: 】
: 协程机制与线程混用带来更高 的复杂性。
:
: 异步调用到最后,还是要同步,不如一开始就同步。
: ...................
--
FROM 221.218.60.*