协程与线程的区别_协程和线程的区别

本文介绍了协程(Coroutine)与线程的区别,强调协程作为轻量级的线程,能实现更高效的执行切换。通过C#代码示例展示了协程如何在执行过程中中断和恢复,以及其共享内存特性,避免了线程安全问题。协程在Java中尚未支持,但在其他语言中已得到应用。
摘要由CSDN通过智能技术生成

协程(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 intList = Xc.GetList(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值