协程VS多线程 应用场景比对

众所周知 ,多线程除了会给cpu带来切换上下文的开销,还会产生资源竞争,想要用多线程,免不了这里那里加个锁。

所以多线程在有些时候并不讨巧。

所以,协程出现了,他也可以并发的执行多线逻辑,但完全不会给cpu带来额外负担,且不存在任何资源竞争。

看起来,协程可以完美替代多线程了。

但其实,协程也只是在特定应用情境下才适用。

使用多线程的目的之一是为了不阻塞主线程的迭代循环,让主线程可以顺畅运行,而协程的使用目的就只限于此。

那些需要计算,可能在同一帧内做大量运算的事情,就无法靠协程去并发。因为他们也会加大主线程在一帧内的计算量,一样会造成卡帧。

所以协程做的基本上是一些检查工作

检查一个计时器是否到了指定的时间 

检查一个下载是否已经完成 

检查另一个协程是否结束 

甚至什么不做 

更进一步归纳

协程的yield 就相当于 异步函数的await

区别是 yield背后执行的每帧检查工作在主线程 且每次检查几乎不费事

而await 后面跟的是一个Task 一个可能需要花上很久才能结束的多线程任务

(其实,理论上感觉,只要这个task的逻辑可以分成多帧去执行 且可以控制好每帧的计算量

就可以用协程代替他。

当然多核处理的优势是无论如何都没法替代的,特别是在将来很有可能普及32线程甚至64线程的产品,

一个协程就想以一敌百吗,纵使你有百般能耐,也不可能以一敌百....)

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值