# -*- coding:utf-8 -*-

'''

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!面试时会问，一定要记住!!!!!!!!!!!!!!!!!!!!!!!!!!


'''

'''

多任务：

    *   指打开多个应用程序

    *   静态程序加载到内存中一般要划分成：
            -   数据区（存放全局数据、程序中的静态数据）、
            -   代码区（存放程序运行时的指令）、
            -   堆区（对象、全局变量）、
            -   栈区（函数调用、函数中的局部变量）等

    *   应用程序打开后加载到内存里，就变成了进程，所以多任务的第一个表现形式是——进程

    *   多进程是多任务最直接的体现

    *   表现形式二：多线程


多任务的实现有3中方式：

    *   多进程模式

    *   多线程模式

    *   进程 + 多线程模式


进程：

    *   Process,（正在执行中的程序）
        -   是程序的基本执行体
        -   是线程的容器，可以包含多个线程
        -   是对各种资源管理的集合，里面包含对各种资源的调用、内存的管理、网络接口的调用等

    *   每个进程都是独立的，有独立的内存空间，并且不能共享全局变量



守护进程（孤儿进程）：

    *   子进程是有父进程创建，如果父进程先退出，此时，子进程会被PID为1的进程（就是init进程）
    接管（托孤给了init进程）。这样进程就不会受终端退出影响了，使用这个特性可以创建后台执行的程序


僵尸进程：

    *   如果子进程先退出，父进程还没有退出，那么子进程就必须等到父进程捕获到子进程的退出状态
    才真正的结束，这个时候子进程就成为僵尸进程（僵尸进程：只保留一些退出信息供父进程查询）


线程：

    *   是系统进行运算调度的最小单位

    *   一个标准线程由：线程ID，当前任务指针，寄存器集合和堆栈组成

    *   每个程序至少有一个线程，如果程序只有一个线程，那就是程序本身

    *   线程自己不拥有系统资源，它与同属一个进程的其它线程共享进程所拥有的全部资源

    *   一个线程可以撤销另一个线程

    *   同一个进程中多个线程可以并发执行

    *   线程基本状态：

        -   就绪状态:具备运行的所有条件，逻辑上可执行，等待处理机

        -   运行状态：线程占有处理机正在运行

        -   阻塞状态:线程等待某个事件（满足条件），逻辑上不可执行


线程、 进程——区别：

    *   线程共享内存空间 —;— 进程内存是独立的

    *   同一个进程内的线程可以互相交流 —;— 进程之间进行通信交流，需要使用中间代理实现

    *   创建新线程容易 —;— 创建新进程需要对其父进程进行一次克隆

    *   一个线程可以控制和操作同一进程里的其他线程 —;— 进程只能操作子进程

    *   改变主线程（如优先权），会影响其他线程 —;— 改变父进程，不影响子进程
    
    
一个程序至少有一个进程，一个进程至少有一个线程  这句话面试时，重要程度 ***** 五颗星 *****

'''
