zoukankan      html  css  js  c++  java
  • 进程、线程、协程三者之间的联系与区别

    进程、线程、协程三者之间的联系与区别
     

    一、进程

        进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位

     二、线程

        线程,有时被称为轻量级进程(Lightweight Process,LWP),是操作系统调度(CPU调度)执行的最小单位。

     

    三、协程

        协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
        协程在子程序内部可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行。

     

    四、进程和线程的区别与联系

        并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
        拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
        系统开销:多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。    
        线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
        协程和线程区别:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。

    协程的特点在于是一个线程执行,那和多线程比,协程有何优势?
        1.极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显;
        2.不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

    【联系】:线程与进程的联系
        1.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;
        2.资源分配给进程,同一进程的所有线程共享该进程的所有资源;
        3.处理机分给线程,即真正在处理机上运行的是线程;
        4.线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
     

        操作系统的设计,因此可以归结为三点:

        (1)以多进程形式,允许多个任务同时运行;

        (2)以多线程形式,允许单个任务分成不同的部分运行;

        (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

    有需要交流的小伙伴可以点击这里加本人QQ:luke

  • 相关阅读:
    Spring MVC 核心组件详解
    Spring MVC 入门就这一篇
    Spring 事务解决方案
    【UGUI源码分析】Unity遮罩之Mask详细解读
    游戏开发中不同时区下的时间问题
    ARTS第十三周(阅读Tomcat源码)
    Win10 电脑安装.NET低版本提示“这台计算机中已经安装了 .NET Framwork 4.6.2或版本更高的更新”问题
    Dynamics 365 Setup 提示SqlServer 存在
    Dynamics CRM "Verification of prerequisites for Domain Controller promotion failed. Certificate Server is installed."
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/starluke/p/11795342.html
Copyright © 2011-2022 走看看