美文网首页
协程技术

协程技术

作者: 赫灵 | 来源:发表于2018-10-27 17:19 被阅读0次

    1、协程(Coroutine):比线程的单位更小,在一个线程中可以开启多个协程,利用多个协程实现并发。

    2、协程跟具有操作系统概念的线程不一样,实际上协程就是像函数一样的程序组件,可以在一个线程里面轻松创建数十万个协程,就像数十万次函数调用一样。只不过函数只有一个调用入口起始点,返回之后就结束了,而协程入口既可以是起始点,又可以从上一个返回点继续执行,也就是说协程之间可以通过 yield 方式转移执行权

    3、举个栗子:

    如果用多线程实现生产者-消费者模式,线程之间需要使用同步机制来避免产生全局资源的竟态,这就不可避免产生了休眠、调度、切换上下文一类的系统开销,而且线程调度还会产生时序上的不确定性。

    而对于协程来说,“挂起”的概念只不过是转让代码执行权并调用另外的协程,待到转让的协程告一段落后重新得到调用并从挂起点“唤醒”,这种协程间的调用是逻辑上可控的,时序上确定的,可谓一切尽在掌握中。

    协程与多线程对比:

    优势:

    1、协程极高的执行效率。单线程内就可以实现并发的效果,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。

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

    劣势:

    1、无法利用多核CPU

    2、一旦协程出现阻塞,将会阻塞整个线程

    解决方案:

    多进程+协程:既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

    (欢迎打赏,一分也是爱)

    相关文章

      网友评论

          本文标题:协程技术

          本文链接:https://www.haomeiwen.com/subject/uzmdtqtx.html