美文网首页
简述进程、线程、协程(施工中)

简述进程、线程、协程(施工中)

作者: PlayerI | 来源:发表于2019-02-01 16:31 被阅读0次

    关于三者的概念,网上有非常多的文章去介绍,但是每个作者的业务能力不同,叙述的方式也不同,本文旨在以一个初学者的角度去描绘三者的异同及功效。不涉及深层次的原理,如有纰漏请予以斧正。


    一、概念

    本章主要是介绍一下概念型的东西,经过加工后相对会比较好理解。也可以先略过本章节。

    1、 基础

    操作系统(OS):管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。

    程序(Program):即代码,是一个没有生命的实体。

    当操作系统执行程序时,需要在计算机内存中开辟一个独立空间,此时程序成为了一个活动的实体,我们称其为进程。

    进程(Process):是操作系统进行资源分配和调度的基本单位,是操作系统结构的基础。

    进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
    进程是线程的容器,每个进程至少拥有一个线程。

    线程(Thread):别名轻量进程(Lightweight Process,LWP),是操作系统调度(CPU调度)执行的最小单位,是程序执行流的最小单元。

    线程是协程的容器,每个线程可以有0~无限(理论上)个协程。

    协程(Coroutine):是单线程下的并发,又称微线程 。协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。

    维度 进程 线程 协程
    调度者 CPU CPU 用户/代码
    分配资源
    个数限制 - ≥1 0~∞
    修改共享数据 - 加锁 无需加锁

    2、 延伸

    阻塞:干不完就一直干,干完再回来

    并行运行:总线程数<= CPU数量

    并发运行:总线程数> CPU数量

    3、多线程、多进程

    维度 多进程 多线程 占优
    数据共享、同步 数据共享复杂,需要用IPC;数据是分开的,同步简单 共享进程数据,数据共享简单,同步复杂 -
    内存、CPU 占用内存多,切换复杂,CPU利用率低 占用内存少,切换简单,CPU利用率高 线程
    创建销毁、切换 创建销毁、切换复杂,速度慢 创建销毁、切换简单,速度很快 线程
    编程、调试 编程简单,调试简单 编程复杂,调试复杂 进程
    可靠性 进程间不会互相影响 一个线程挂掉将导致整个进程挂掉 进程
    分布式 适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单 适应于多核分布式 进程

    参考资料:《多线程还是多进程的选择及区别》


    二、类比

    1、叙述场景:

    有一间餐厅,厨房里有一口电磁炉、一个水龙头等设施和一个厨师。起初,生意惨淡,厨师一个人炒菜,还忙的过来。但是随着生意的发展,前来就餐的顾客越来越多,这让厨师忙的焦头烂额,由于出餐速度慢,收到了不少投诉。

    2、假说前提:

    • 出一道菜的整个流程包括:炒菜4分钟,休息1分钟,雷打不动;
    • 一位厨师一时间只管出一道菜,在走完整个出菜流程之前,绝不分心,绝不退出厨房(同步IO阻塞);
    • 厨房仅能容纳一人作业(一个CPU核心上同一时间仅能运行一个线程)。

    3、解决方案:

    我们如需要改善餐厅的经营情况,务必要提高出菜效率,那么提供以下几种方式:

    1. 增加若干完整的厨房:两个厨房同时出菜,可以提高效率;
    2. 只增加人手:由于厨房只能容纳一人,那么一个人出菜的时候,另一个人只能等待,无法提高效率;
    3. 招若干个休息的时候愿意让出厨房的厨师:每道菜可以节约厨师休息的时间。

    4、对应关系:

    • CPU核心 = 厨房
    • 资源 = 水+电+人+物料+场地...
    • 程序 = 出菜的方法
    • 进程 = 厨房+配套设施+厨师+要出的菜
    • 线程 = 厨师
    • 阻塞 = 厨师休息时间厨房没有产出

    5、解析:

    • 方法1,对应多核CPU运行多个进程,是简单粗暴的提升效率的方式;
    • 方法2,对应使用多线程(抢占),但是由于一个CPU核心上同一时间只能有一个线程在运行,故此无法提高程序效率;
    • 方法3,对应使用协程(注意协程也是一种线程),没有打破上一条中的原则,它是通过协作的方式并非是抢占,在一个线程等待的时候,让出CPU的使用权,直到那个线程交还CPU使用权它才继续执行。这种方式提高了CPU的使用效率。

    相关文章

      网友评论

          本文标题:简述进程、线程、协程(施工中)

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