进程是操作系统进行资源分配和调度的一个独立单位,是应用程序的载体。进程一般有程序,数据集合和进程控制块三部分组成。每一个进程都有自己的独立内存空间,不同进程通过进程间通信。由于进程比较重量,占据独立的内存,所以上下文进程间切换开销比较大,但相对比较安全。
进程具有的特征
进程的生命周期:
进程在运行过程中有三种状态:就绪、运行、阻塞。创建和退出状态是进程的创建过程和推出过程
创建:进程正在创建,还不能运行。操作系统在创建进程时要进行的工作包括分配和建立进程,控制块表象,建立资源表格并分配资源、加载程序并建立地址空间
就绪:时间片已用完,此线程被强制暂停,等待下一个属于它的时间片到来
运行:此线程正在执行,正在占用时间片
阻塞:等待状态,等待某一个事件(如IO或另一个线程)执行完
退出:进程已结束,释放操作系统分配的资源
线程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位,是处理器调度的基本单元。线程一般有线程ID,当前指令指针,寄存器和堆栈组成。一个进程至少拥有一个线程,同一个进程中的多个线程共享该进行的资源。
线程的生命周期:
创建:一个新的线程被创建,等待该线程被调用执行
就绪:时间片已经用完,此线程被强制暂停,等待下一个属于它的时间片到来
运行:此线程正在执行,正在占用时间片
阻塞:等待状态,等待某一个事件(如IO或另一个线程)执行完
退出:一个线程完成任务或者其他终止条件发生,该线程终止进入退出状态,退出状态释放该线程所分配的资源。
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。
GIL是CPython解释器的概念,叫全局解释器锁。
产生的原因:创建Python是只考虑到单核CPU,解决多线程之间数据完整性和状态同步的最简单的方法就是加锁,于是有了GIL,因为CPython解析只允许拥有GIL全局解析器才能运行程序,这样保证了同一时刻只允许一个线程使用CPU
解决办法: