1、处理事物的几种逻辑方式
- 串行:几个事物,一个人,按照顺序,一件一件来做,叫做串行。此种方法适用于几个事物有严格顺序要求,前后强相关、强依赖的事物,但效率偏低。
- 并行:几个事物,几个人,各做各的,即同一时间可以同时做多件事情,叫做并行。此种方法适用于几个事物无顺序要求,效率高。
- 并发:介于串行与并行之间,几个事物,一个人,一段时间内做不同的事情,叫做并发。此种方法适用于事物无顺序要求,效率偏高,同时能够节约成本。
2、并发与并行的区别
Erlang 之父 Joe Armstrong 用一张5岁小孩都能看懂的图解释了并发与并行的区别
3、进程、线程
- 进程:进程是计算机系统进行资源分配和调度的基本单位【是操作系统(OS)进行资源(CPU、内存、磁盘、IO、带宽等)分配的最小单位;】。是系统OS对正在运行的程序的一种抽象,是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。
百度百科有专门的介绍: https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/382503?fr=aladdin - 线程:线程是CPU调度和分派的基本单位,它是比进程更小的能进行独立运行的基本单位;线程基本上不拥有独立的系统资源,只有在运行的时候调用必不可少的资源,与同一个进程中的线程共享全部的资源。
百度百科:https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B/103101?fr=aladdin - 进程与线程的关系
1.一个线程只能属于一个进程 ,而一个进程可以有多个线程,但至少有一个线程。
2.资源分配给进程,同一个进程的所有线程共享该进程的所有资源。
3.CPU的资源分给线程,即真正在CPU上运行的是线程。
4.进程拥有它自己的独立空间。线程是通过进程创建的,在进程之间共享该进程的内存空间
5.线程直接访问进程的数据块,进程是将父进程中的数据再复制出一份使用
6.进程中的线程间是可以直接通信的,子进程与父进程不能直接通信,但可以通过队列管道相互交流数据
7.一个新的线程创建很容易,一个新的进程创建需要从父进程里重新拷贝父进程的所有数据,创建进程会耗费系统资源
8.一个进程中的多线程间可以控制其它进程,进程只能控制它的子进程
9.改变主线程优先级会影响线程在进程中的行为,改变父进程不会影响子进程
CPU、核心,进程、线程,串行、并发、并行:
计算机进程、线程简述 :
4、Python中的并发使用
并行(并发)任务两种任务场景
- 计算密集型任务:其特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等。
- IO密集型:其特点是涉及大量的 I/O读写,例如大量文件读写,爬虫数据爬取等。
计算密集型任务使用多进程、I/O密集型任务使用多线程,其两个原因如下:
1)、CPython解释器强制实现了全局解释器锁(GIL),每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争程序中的全局变量而出现的线程安全问题。这就导致无法同时使用多CPU,
2)、目前家用PC、服务器等等都拥有多个CPU,但是线程是CPU的最小调度单元,我们需要调度更多的CPU,则不能使用多线程。
python中的模块
- multiprocessing — 基于进程的并行 ,https://docs.python.org/zh-cn/3/library/multiprocessing.html#
- threading — 基于线程的并行,https://docs.python.org/zh-cn/3/library/threading.html