协程到底有没有并发执行
单线程控制权交替
■网友
协程是一种并发机制,这里要区分并发与并行的区别。
并行通常是指利用多核CPU来做计算密集型任务来达到提升效率。
并行只是并发的一个真子集。
【协程到底有没有并发执行】 CSAPP讲并发的一章将并发分为三个类型,多进程、IO多路复用、多线程。
协程有些类似于IO多路复用,单进程内单线程即可搞定。IO会在等待IO是被cpu切换掉,而协程则是人为对切换点加以控制(yield),所以是并发。
关于并发与并行,可以参考我的另一个答案:
如何直观地通过代码例子来证明Python的GIL存在?
■网友
个人理解协程的好处是减少上下文的切换,用户态线程你敢开1w个协程跑,你开1w个线程试试,光上下文切换就是一比不小的开销他底层一般还是多线程之类在调度,至少我了解到的erlang中进程的概念其实就是协程,底层还是多线程调度(每个线程掌管一个调度器),还会有锁,不过这是vm的层面了
■网友
因为它本来就是一种抽象机制,底层实现根据需求可以不同。就像线程一样,没说一个线程一定对应一个内核进程或内核线程的。不同操作系统根据不同抽象模型可以有不同的实现策略。你可以看我这个简单的例子 http://github.com/sonald/coro,是一种执行流并发的简单抽象,完全无线程对应,调度上是主动出让。go语言的携程可能就会是多个携程运行在一个独立线程上。
■网友
为啥携程开销小呢?实现层面如何把控呢?
■网友
没有用到多线程。多线程本来也就一样是单线程控制权的交替。
推荐阅读
- 联运■连云港港全国首推集装箱铁水联运“一单到底”
- 汽车知识|第八代高尔夫到底值不值得买?1.4T自动Pro版全款多少钱?
- 知乎有没有必要增加一个特别关注功能
- 人潮汹涌|丁真爆火第20天,到底谁才是真正的“幕后推手”?华春莹为他连发三推
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
- 什么|到底是什么原因?宝宝易咳嗽
- 京广和公司到底是干啥的
- 趣头条|幻影提车小记…有没有车主群加一个
- 董洁|40岁的董洁到底怎么啦?少女造型被吐槽,女性的温柔感也不见了
- 基因是主动表达还是受某种场的影响被动表达,又或两者都有有没有隔绝所有电磁场来研究基因表达的实验
