python3进程和线程

发布时间:2019-10-16 17:29:36编辑:auto阅读(2424)

    在解释进程之前,我们要知道在操作系统中存在就绪队列和阻塞队列

    进程

    进程基本概念

    1. 进程是执行中的程序, 也就是说进程是动态的, 程序是静态的
    2. 进程是操作系统分配资源的最小单位,有一个进程控制块(PCB), 有自己唯一的一个进程标识符(PID)
    3. 进程之间相互独立, 内存不共享
    4. 每个进程都是一个实体, 每个进程都有属于自己的一块内存, 进程是一个执行中的程序
    5. 进程的创建,销毁,切换的开销都比较大
    6. 进程只能创建子进程, 无法创建平级进程

    进程三种状态

    1. 就绪: 获取到除CPU之外的其他所有资源, 只要处理器分配资源就可以马上运行, 此时进程处于就绪队列中, 等待获得处理机
    2. 运行: 就绪状态的进程获取到CPU之后转为运行状态, 进程开始执行
    3. 阻塞: 进程申请的资源未被满足, 比如申请一个临界资源时(临界区是进程访问临界资源的那一段代码), 资源正在被其他进程使用, 这时进程进入阻塞状态, 释放处理器, 进程的阻塞是主动的, 也就是自己将自己阻塞, 这时进程会被加入阻塞队列, 在实际中, 可能会有多个阻塞进程, 分别放置因为不同原因被阻塞的进程. 当一个进程使用完临界资源后, 会到阻塞队列中去唤醒处于阻塞队列头的进程.

    CPU处理进程方式

    时间片轮转:
    给每个进程分配一个时间片, 如果进程在时间片内执行完就直接执行下一个进程, 如果没执行完, 进程释放CPU给下一个进程
    优先级队列:
    在优先级队列中, 每个进程都会被分配优先级(优先级有静态和动态之分, 所谓静态便是在整个运行过程中优先级不会改变, 而动态优先级在运行时, 优先级会发生改变),处理机每次选择当前优先级最高的进程执行.
    非抢占式和抢占式区别:
    非抢占式: 在进程运行时, 不允许别的进程剥夺当前运行进程的处理器, 在这种情况下, 在用优先级分配处理机时, 正在运行的进程优先级不一定是当前所有进程中优先级最高的, 因为可能在进程运行过程中有更高的进程被加入到就绪队列中.
    抢占式: 在进程运行中, 已获得处理机的进程可能会被新来的优先级更高的进程剥夺处理机.


    线程

    线程基本概念

    1. 线程是CPU的基本调度单位
    2. 一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
    3. 不同进程之间的线程相互不可见
    4. 线程不能独立执行
    5. 一个线程可以创建和撤销另外一个线程

    进程和线程的区别

    1. 一个进程至少有一个进程, 一个进程至少有一个线程
    2. 进程有自己独有的内存单元, 而多个线程共享一块内存单元
    3. 一个进程死掉对于其他进程无影响, 但是一个线程死掉整个进程都会死掉, 所以多线程程序没有多进程程序健壮

    协程

    协程基本概念

    1. 协程是用户模式下的轻量级线程, 协程不被内核所知
    2. 协程由用户自己调度

关键字