协程技术
2018-10-27 本文已影响0人
赫灵
1、协程(Coroutine):比线程的单位更小,在一个线程中可以开启多个协程,利用多个协程实现并发。
2、协程跟具有操作系统概念的线程不一样,实际上协程就是像函数一样的程序组件,可以在一个线程里面轻松创建数十万个协程,就像数十万次函数调用一样。只不过函数只有一个调用入口起始点,返回之后就结束了,而协程入口既可以是起始点,又可以从上一个返回点继续执行,也就是说协程之间可以通过 yield 方式转移执行权
3、举个栗子:
如果用多线程实现生产者-消费者模式,线程之间需要使用同步机制来避免产生全局资源的竟态,这就不可避免产生了休眠、调度、切换上下文一类的系统开销,而且线程调度还会产生时序上的不确定性。
而对于协程来说,“挂起”的概念只不过是转让代码执行权并调用另外的协程,待到转让的协程告一段落后重新得到调用并从挂起点“唤醒”,这种协程间的调用是逻辑上可控的,时序上确定的,可谓一切尽在掌握中。
协程与多线程对比:
优势:
1、协程极高的执行效率。单线程内就可以实现并发的效果,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
2、不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
劣势:
1、无法利用多核CPU
2、一旦协程出现阻塞,将会阻塞整个线程
解决方案:
多进程+协程:既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
(欢迎打赏,一分也是爱)