热点评!协程这么好,它能完全代替线程么?
2022-12-20 16:46:10

好多问题呀,开始回答或者提问前,其实可以看看问题本身是不是有问题,像黄执中一样。


(相关资料图)

------

这个问题首先前提就有问题,谁说协程那么好的?任何技术肯定都有自己的适用场景,这种通用层面的技术则更是了。

协程本质上就是由用户代码主动在某个时间点出让 CPU,可以在任何一行出让,当然语言层或框架层的协程一般会在原本是阻塞函数的调用内部,让出 CPU 资源,不阻塞当前线程。

当然像 go 这种协程做的特别牛逼的,牛逼到它自己都不想承认自己是协程的语言,就另说了。

所以协程一般适用于 IO 密集型的高并发场景。

你要说就完全 CPU 密集型计算,那还不如开你 CPU 核数那么多线程呢,开了协程反而不能并行了,还多了协程间切换的损耗。

所以协程那么好,这句话就可以否了,同时也顺便拿出了一个场景,说明用协程替换线程是负优化的,自然协程也不能完全替换线程。

------

再有,刚刚是站在应用程序角度考虑,要分场景看是使用协程还是线程。再从操作系统层面考虑,协程就根本无法替代线程了。

你想,协程需要自己主动出让 CPU 资源,那要是操作系统使用协程来运行应用程序,那万一应用程序自己一直不出让 CPU,也不调用能产生阻塞操作进而间接出让 CPU 的代码,那不就坏事了。

再有,协程本身的优势在于切换成本小,本质是因为栈小,而且也不需要切换页表。

那要是操作系统真的拿协程来跑多应用程序,这些优势也就不复存在了,而且如果协程实现在了内核态,本身从用户态陷入内核态的切换也少不了。

所以本来协程有的优势,在这里全没了,还极大增加了不公平性。

------

最后,这俩事情本身就不好讨论替换这一说,因为他们本质都不一样。

协程说白了就是一段串行的指令流,只不过中间哪个地方往哪跳的逻辑,被封装在了 "协程" 这个概念里而已。

再者,协程本身也是要跑在线程中的,需要有载体,他们二者本身就是相辅相成的关系,何来替代呢,更别说完全替代了。

有时候,了解清楚一项技术的本质,就能更好看清这些问题的荒诞了。

今天阳了躺在床上实在无聊,就挑了个知乎上的问题回答了一下,看好多回答都没说在点子上,就码了这些字,感兴趣的同学可以点开阅读原文看看。

热门推荐

文章排行

  1. 2022-12-20热点评!协程这么好,它能完全代替线程么?
  2. 2022-12-20环球滚动:Free Arch: 将 IdentityServer 部署到 Okteto
  3. 2022-12-19*ST海伦: 关于公司持股5%以上股东股份减持计划提前终止的进展公告
  4. 2022-12-19亨迪药业董秘回复:公司目前生产经营正常,不存在产能被政府相关部门征用的情况
  5. 2022-12-19天天播报:安纳达:铜陵安轩达新能源材料有限公司建设5万吨/年高性能磷酸铁项目,计划力争不迟于明年3季度建成投产
  6. 2022-12-19全球滚动:太康姜丁文:为给他人测量测温更准确 她用体温去暖测温枪
  7. 2022-12-18天天看点:梅西还是姆巴佩?今日23点,一起期待世界杯决赛
  8. 2022-12-17各地加大马力复工忙 调整能源供需力保迎峰度冬
  9. 2022-12-17百万实盘:大头12月16日投资分享,继续加仓白酒和消费!
  10. 2022-12-16东方创业: 东方创业监事会对2021年A股限制性股票激励计划预留授予激励对象名单的公示情况说明及核查意见
  11. 2022-12-16最新消息:森林包装:现行的应用范围覆盖于医药医化、机电、家用电器、鞋帽服装、汽摩汽配、农产品、快递消费及餐饮等行业的客户需求
  12. 2022-12-15深物业A(000011.SZ):子公司已收到全部收地补偿款约1.97亿元-热议
  13. 2022-12-15焦点速讯:安彩高科董秘回复:石英砂矿的收购工作尚在推进过程中
  14. 2022-12-15全球时讯:异动快报:ST升达(002259)12月7日14点30分触及涨停板
  15. 2022-12-14欧克科技: 关于召开2022年第二次临时股东大会的公告-滚动
  16. 2022-12-14孟津区白鹤镇山药“种”出致富路:全球最新
  17. 2022-12-14粤万年青董秘回复:公司目前没有中药材种植业务:世界快讯
  18. 2022-12-13【全球报资讯】爱尔眼科(300015):2021年限制性股票激励计划首次授予部分第一个解除限售期解除限售股份于2022年12月16日上市流通
  19. 2022-12-13世界最新:湖南发展(000722)12月12日主力资金净卖出3623.43万元
  20. 2022-12-12津药达仁堂15品种入选北京卫健委《新冠病毒感染者用药目录(第一版)》