[转帖]协程技术

协程技术

https://www.jianshu.com/p/1c77bdc53e02

 

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

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

3、举个栗子:

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

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

协程与多线程对比:

优势:

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

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

劣势:

1、无法利用多核CPU

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

解决方案:

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

你可能感兴趣的:([转帖]协程技术)