Linux_day05_03_进程管理基础知识

进程管理基础知识

  1. 什么是进程?什么是线程?什么是协程?

    • 进程
      • 一个正在执行的程序,是操作系统资源分配的最小单位,具有独立的地址空间
      • 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的
      • 并发性:任何进程都可以同其他进程一起并发执行
      • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
      • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
      • 结构特征:进程由程序、数据和进程控制块三部分组成
      • 多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变
    • 线程
      • 轻量级进程(Lightweight Process,LWP),是操作系统调度(CPU调度)的最小单位,是进程的一个实体
      • 主线程是创建进程中产生的第一个线程,也就是main函数对应的线程
      • 线程自己不拥有系统资源,只拥有在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
      • 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行
      • 线程也有就绪、阻塞和运行三种基本状态
    • 协程
      • 比线程更加轻量级,是一种用户态的轻量级线程,协程的调度完全由用户控制
      • 协程是一个线程执行,两个子过程通过相互协作完成某个任务
      • 协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行
  2. 进程、线程、协程之间有什么优缺点

    • 进程

      • 每个进程相互独立,不影响主程序的稳定性
      • 通过增加CPU就可以提高性能
      • 可以通过减少线程加锁/解锁的影响来提高性能
      • 进程之间不共享资源,有利于资源保护
      • 逻辑控制复杂,需要和主程序交互
      • 进程拥有独立的内存空间,创建进程开销大
      • 多进程调度开销比较大
    • 线程

      • 同一进程的线程共享资源,提高了程序的运行效率
      • 创建线程开销较少,运行消耗资源也较少
      • 线程不能独立运行,必须存在于进程中
      • 线程之间的同步和加锁/解锁比较麻烦
      • 每个线程与主程序共用地址空间,受限于2GB地址空间
      • 到达一定的线程数程度后,即使再增加CPU也无法提高性能
      • 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也需要消耗较多的CPU
    • 协程

      • 无需线程上下文切换的开销
      • 方便切换控制流,简化编程模型
      • 高并发性、高扩展性、低成本
      • 协程需要用户自己编写调度逻辑
      • 无法利用多核资源:协程的本质就是单线程,它不能同时将单个CPU的多核用上,协程需要配合进程才能运行在多核CPU上
      • 进程堵塞操作会堵塞掉整个程序
  3. 进程和线程的区别与联系

    • 进程是资源分配的最小单位,线程是cpu调度的最小单位
    • 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
    • 资源分配给进程,同一进程的所有线程共享该进程的所有资源;
    • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
    • 系统开销:多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些
  4. 和多线程相比,协程有什么优势?

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

    • 交互进程:由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
    • 批处理进程:这种进程和终端没有联系,是一个进程序列。
    • 监控进程(也称守护进程):Linux系统启动时启动的进程,并在后台运行。
  6. 进程通信机制

    • 管道( pipe ):
      管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
    • 有名管道 (namedpipe) :
      有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    • 信号量(semophore ) :
      信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    • 消息队列( messagequeue ) :
      消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    • 信号 (sinal ) :
      信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    • 共享内存(shared memory ) :
      共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
    • 套接字(socket ) :
      套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。

猜你喜欢

转载自blog.csdn.net/qq_44924544/article/details/108912513