# -*- coding:utf-8 -*- ''' 进程------ 程序的执行实例称为进程。资源的集合。****** 每个过程都提供执行程序所需的资源。 进程具有虚拟地址空间、可执行代码、对系统对象的打开句柄、安全上下文、惟一进程标识符、环境变量、优先级类、最小和最大工作集大小,以及至少一个执行线程。 每个进程都由一个线程启动,通常称为主线程,但是可以从它的任何线程创建额外的线程。 ''' # 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。 # 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。 # 有了进程为什么还要线程? # 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上: # 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。 # 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。 ''' 进线-------- 线程是一个执行上下文,它是CPU执行指令流所需的所有信息。 假设你正在阅读一本书,你现在想休息一下,但是你希望能够从你停止阅读的地方重新开始阅读。实现这一点的一种方法是记下页码、行号和单词号。所以你阅读一本书的执行上下文是这三个数字。 如果你有一个室友,她也在用同样的方法,她可以在你不用的时候拿起这本书,从她停下的地方继续阅读。然后你就可以把它拿回去,重新开始。 线程以同样的方式工作。CPU给你的错觉是它同时在做多个计算。它通过在每次计算上花费一点时间来做到这一点。它可以这样做,因为它为每个计算都有一个执行上下文。就像您可以与您的朋友共享一本书一样,许多任务也可以共享一个CPU。 在更技术的层次上,执行上下文(因此是线程)由CPU寄存器的值组成。 最后:线程与进程不同。线程是执行的上下文,而进程是一组与计算相关的资源。一个进程可以有一个或多个线程。 ''' # 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。**** #一条线程指的是进程中一个单一顺序的控制流, #一个进程中可以并发多个线程,每条线程并行执行不同的任务 ''' 区别: 1.线程共享创建进程的地址空间;进程有自己的地址空间。 2.线程可以直接访问其进程的数据段;进程拥有父进程的数据段的自己的副本。 3.线程可以直接与进程中的其他线程通信;进程必须使用进程间通信来与同级进程通信。 4.新线程很容易创建;新进程需要父进程的复制。 5.线程可以对同一进程的线程进行相当大的控制;进程只能对子进程进行控制。 6.主线程的更改(取消、优先级更改等)可能会影响进程中其他线程的行为;对父进程的更改不影响子进程 ''' ################################# ''' Python GIL In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.) python无论启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行 复习: 程序的执行实例称为进程、进程资源的集合 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 1、线程共享创建进程的地址空间;进程有自己的地址空间。 2、线程同时修改同一份数据时,必须加锁 (mutex)互斥锁 3、递归锁 3、join 不加join的时候、主线程和子线程并行,没有依赖关系 当加上join的时候,主线程依赖子线程执行完毕之后再执行 queue 解耦,使程序之间实现松耦合 提高处理效率 1.多线程使用场景:IO密集型 2.多进程使用场景:CPU密集型 '''