协程

        协程(coroutine),又称微线程,是一种用户态的轻量级线程。

 

       线程是系统级别的,由操作系统切换CPU进行调度。

       协程是程序级别的,由程序根据自己的需要调度。

 

        一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以终端回来继续执行之前的子程序,这个过程就称为协程。

      调用子程序是通过栈实现的,子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行

      注意,在一个子程序中中断,去执行其他子程序,不是函数调用,有点类似CPU的中断

 

       协程拥有目己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态.

 

       但是在A中是没有调用B的,所以协程的调用比函数调用理解起来要难一些。看起来A、B的执行有点像多线程,但协程的特点在于是一个线程执行,那和多线程比,协程有何优势?

       ①最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。

       ②第二大优势就是不需要多线程的锁机制。因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

       ③高并发+高拓展性+低成本。一个CPU支持上万的协程都不是问题,所以很适合用于高并发处理

但是

       协程无法利用多核CPU资源,因为协程的本质是个单线程,它不能同时将单个CPU的多个核用上。当然我们日常所编写的绝大部分应用都没有这个必要,除非cpu密集型应用

       那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

 

多协程、多线程、多进程都是实现并发的方式,根据场景不同选择不同的方式

  • 如果是 I/O 密集型,且 I/O 请求比较耗时的话,使用协程。
  • 如果是 I/O 密集型,且 I/O 请求比较快的话,使用多线程。
  • 如果是 计算 密集型,考虑可以使用多核 CPU,使用多进程

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值