什么是协程

作者: Java老A | 来源:发表于2019-08-03 21:02 被阅读2次

协程(Coroutine)又称为微线程,我们知道线程是CPU的执行的最小单位,线程执行的最小代码单位是方法。

比如在执行的时候,一个线程从程序的入口调用Main方法,Main调用A方法,A方法又调用B方法,整个函数的执行完成的顺序是B->A->Main。这个调用的顺序是明确的,是通过压栈和出栈的方式确定的。

而协程不同, Main调用B,在调用B的过程中可以中断,Main函数继续执行一会,Main再中断,B继续再执行一会, 继续执行的代码是上次中断的地方。

用伪代码表示两个方法:

funcA(){
     funcB();
     print 4;
     print 5;
     print 6;
}
funcB(){
     print 1;
     print 2;
     print 3;
}

如果是用正常的单线程线程来执行的时候,打印结果是123456,如果采用协程,打印结果就有可能是142536.

协程的执行的结果有点和多线程类似,但本质与多线程不同,线程有上下文切换,存在变量的拷贝,而协程只是轻量级的方法中断,所以切换效率是高于线程。

协程所有的变量都是共享内存,访问不需要加锁,使用时只需简单的判断,不存在线程不安全问题。

在Java中,还不支持协程的机制,所以用C#来演示下协程的过程。

   static void Main(string[] args)
   {
        System.Console.WriteLine("执行方法:Main");
        IEnumerable<int> intList = Xc.GetList();
        foreach (int i in intList)
        {
             System.Console.WriteLine("协程1:执行");
             Console.WriteLine("协程1:获得返回的结果是:" + i);
        }
   }

   class Xc
   {
        public static IEnumerable<int> GetList()
        {
             System.Console.WriteLine("执行方法:GetList");
             for (int i = 0; i < 10; i++)
             {
                  yield return i;
                  System.Console.WriteLine("协程2: 执行");
                  System.Console.WriteLine("协程2:doSomething");
                  Thread.Sleep(1000);
             }
        }
   }


执行结果如下:

   执行方法:Main
   执行方法:GetList
   协程1:执行
   协程1:获得返回的结果是:0
   协程2: 执行
   协程2:doSomething
   协程1:执行
   协程1:获得返回的结果是:1
   协程2: 执行
   协程2:doSomething
   协程1:执行
   协程1:获得返回的结果是:2

从上面的结果可以看出,在协程1循环执行的时,Main方法会中断,执行GetList方法,执行GetList到达约定中断点,Main方法又继续执行。


gzh.jpg

获得最新的博主文章,请关注上方公众号

相关文章

  • Python并发编程系列之协程!

    1 引言 2 协程的意义 2.1 什么是协程 2.2 协程的作用 2.3 相关概念 3 定义协程 4 使用协程 4...

  • 总结:

    1.什么是协程?什么是协程协程,英文名是 Coroutine, 又称为微线程,是一种用户态的轻量级线程。协程不像线...

  • kotlin协程

    1:什么是协程,kotlin协程是什么。 2:kotlin开启协程的方式 launch async+await两...

  • 入门-协程(Coroutine)

    使用协程需要引入 1.什么是协程 官方文档(本质上,协程是轻量级的线程。) 个人理解:协程是一个线程框架,协程就是...

  • kotlin<第七篇>:协程基础

    一、什么是协程? 二、Android中协程用来解决什么问题? 三、需要添加地依赖 四、创建协程 五、协程的两部分 ...

  • Kotlin 协程

    一、关于协程 协程是Kotlin中最重要、最难学的一块! 为什么协程如此重要? 协程是 Kotlin 对比 Jav...

  • 协程

    1.协程 协程,又称微线程,纤程。英文名Coroutine。 1.1 协程是什么 协程是python个中另外一种实...

  • 协程介绍

    协程 协程,又称微线程,纤程。英文名Coroutine。 1.协程是什么? 协程是python个中另外一种实现多任...

  • Kotlin-Coroutine协程初探-扫盲

    什么是协程? 轻量级线程, 用户态的, 很像线程但又不是线程。 什么是kotlin中的协程? 协程是Kotlin官...

  • Kotlin 协程入门

    本文主要介绍协程长什么样子, 协程是什么东西, 协程挂起的实现原理以及整理了协程学习的资料. 协程 HelloWo...

网友评论

    本文标题:什么是协程

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