一、多线程介绍
1.进程
(1)计算机程序只不过是磁盘中可执行的二进制(或其他类型)的数据。它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期
(2)进程(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行轨迹的辅助数据。操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间
2.线程
线程(有时被称为轻量级进程),跟进程有些相似,不同的是,所有的线程运行在同一个进程中,共享相同的运行环境。我们可以先想象成是在主进程或“主线程”中并行运行的“迷你进程”
3.进程和线程的关系
(1)进程中第一个线程是主线程,主线程可以创建其他线程
(2)其他线程可以创建线程,线程之间是平等的
(3)进程有父进程和子进程,独立的内存空间,唯一标识符:pid
4.进程和线程功能
(1)进程:能够完成多任务,比如一台电脑同时运行多个QQ
(2)线程:能够完成多任务,比如一个QQ中的多个聊天窗口
5.进程和线程的区别和联系
(1)一个程序至少有一个进程,一个进程至少有一个线程(这个线程就是主线程)
(2)线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高
(3)进程在执行过程中拥有独立的内存单位,而多个线程共享内存,从而极大地提高了程序的运行效率
(4)线程不能独立执行,必须依存在进程中
(5)线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源
(6)进程是系统进行资源分配和调度的一个独立单位,进程是资源分配的单位,线程是cpu调度的单位
6.进程与线程的优缺点
(1)多进程的优点是稳定性好,一个子进程奔溃不会影响主进程以及其余进程。但是缺点是创建进程的代价非常大,因为操作系统要给每个进程分配固定的资源,并且,操作系统对进程的总数会有一定的限制,若进程过多,操作系统调度都会存在问题
(2)多线程优点是效率较高一些,但是致命缺点是任何一个线程奔溃都可能造成整个进程的奔溃,因为他们共享了进程的内存资源池
7.并发与并行
(1)并发:在一个时间段,处理多个任务,单核也可以并发(CPU分时间片);
(2)并行:在同一时刻,处理多个任务,必须多核才能并行
8.全局解释器锁(GIL)
(1)GIL本质就是一把互斥锁,将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务修改,进而保证数据安全
(2)某个线程想要执行,必须先拿到GIL,我们可以把它看做一个线程的“通行证”。每个进程中只有一个GIL