美文网首页
协程和线程

协程和线程

作者: 建怀 | 来源:发表于2018-07-08 14:47 被阅读0次

协程和线程

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

协程

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。没有生命周期。

协程与线程比较

  • 1.一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样JAVA中则能使用多核CPU。
  • 2.线程进程都是同步机制,而协程则是异步。
  • 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。

协程的好处

  • 1)跨平台
  • 2)跨体系架构
  • 3)无需线程上下文切换的开销
  • 4)无需原子操作锁定及同步的开销
  • 5)方便切换控制流,简化编程模型
  • 6)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

协程的缺点

  • 1.无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。
  • 2.进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序:这一点和事件驱动一样,可以使用异步IO操作来解决

协程在Go中的使用

go func(){}

go语言的协程库是使得其性能优异。

image

相关文章

  • Unity协程(Coroutine)

    协程与线程的区别 1、协程不是线程,也不是异步执行的。2、协程和 MonoBehaviour 的 Update函数...

  • 协程

    协程 1. 协程介绍 协程又称微线程,从名字可以看出,协程的粒度比线程更小,并且是用户管理和控制的,多个协程可以运...

  • 异步-协程-yield in Python, 2022-06-1

    (2022.06.13 Mon)协程往往和线程做对比。协程也是并发的一种,协程与线程不同之处在于: 线程的调度由C...

  • Kotlin 协程

    协程 协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂...

  • 协程

    协程,又称微线程,纤程。英文名Coroutine。协程是一种用户态的轻量级线程。协程拥有自己的寄存器上下文和栈。协...

  • 协程

    协程,又称微线程,纤程,协程是一种用户态的轻量级线程 协程是单线程 协程的好处: 1 没有上下文切换 ...

  • kotlin之协程(五),launch 函数以及协程的取消与超时

    目录 kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?[https://www.jianshu.c...

  • kotlin之协程(六),协程中的 async和launch的区

    目录 kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?[https://www.jianshu.c...

  • kotlin之协程(七),协程中relay、yield 区别

    目录 kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?[https://www.jianshu.c...

  • kotlin之协程(三),开始创建协程,launch,withC

    目录 kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?[https://www.jianshu.c...

网友评论

      本文标题:协程和线程

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