美文网首页
进程、线程、协程

进程、线程、协程

作者: justonemoretry | 来源:发表于2023-01-28 16:05 被阅读0次

    1 进程与线程的区别

    • 根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
    • 资源开销:每个进程都有独立的代码和数据空间,程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一进程的线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
    • 包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的。
    • 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。
    • 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
    • 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。两者均可并发执行。

    2 协程

    协程,又称为微线程,是一种用户态的轻量级线程,协程的调度完全由用户控制,协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到线程的堆区,在切回来的时候,恢复先前保存的寄存器上下文和栈,整个操作内没有内核切换的开销,可以不加锁访问全局变量,所以上下文切换非常快。
    协程最大的优势就是极高的执行效率,子程序切换比着线程切换更轻量,同一线程内访问共享资源不用加锁。线程占用的内存在MB级别,而协程只需要KB级别。

    3 切换成本

    • 进程的上下文切换不仅包含虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。进程的管理发生在内核态,需要有用户态和内核态的切换。
    • 当两个线程不是同一个进程时,上下文切换和进程切换一样,当两个线程属于同一个进程时,因为虚拟内存是共享的,不需要切换,只用切换寄存器和栈这些线程独享的数据,这个切换过程也要进入内核态,线程调度也是操作系统来调度的。
    • 协程的切换更轻量级,在用户态即可完成切换,只用切换协程自己的寄存器上下文和栈。

    相关文章

      网友评论

          本文标题:进程、线程、协程

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