• 进程、线程与协程的比较


    进程、线程和协程是三个在多任务处理中常听到的概念,三者各有区别又相互联系。

    进程

    进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。 
    进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 
    进程的局限是创建、撤销和切换的开销比较大。

    线程

    线程是在进程之后发展出来的概念。 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。 
    线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些独占性资源存在锁机制,处理不当可能会产生“死锁”。

    协程

    协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。人们通常将协程和子程序(函数)比较着理解。 
    子程序调用总是一个入口,一次返回,一旦退出即完成了子程序的执行。 
    协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点。在python中,协程可以通过yield来调用其它协程。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。其运行的大致流程如下:

    第一步,协程A开始执行。
    第二步,协程A执行到一半,进入暂停,通过yield命令将执行权转移到协程B。
    第三步,(一段时间后)协程B交还执行权。
    第四步,协程A恢复执行。

    协程的特点在于是一个线程执行,与多线程相比,其优势体现在:

    1. 协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
    2. 协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好了。

    Tips:利用多核CPU最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

  • 相关阅读:
    JDBC(解析properties)
    测试字符串
    TestNG基本使用
    细化到知识点的python练习题、笔试题(都说python简单,快来测试一下吧)
    java操作excel(通过POI)
    I/O密集型任务下,单线程、多进程、多线程、协程
    HttpClient的使用(get、post请求)
    磁盘不分区,直接格式化后挂载
    添加 K8S CPU limit 会降低服务性能
    Minio设置永久下载链接
  • 原文地址:https://www.cnblogs.com/reboot777/p/8819102.html
Copyright © 2020-2023  润新知