首先需要明确一下进程和线程的概念。
进程(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间、内存、数据宅及其他记录其运行轨迹的辅助数据。操作系统管理在其运行的所有进程,并为这些进程公平的分配时间,进程也可以通过fork和spawn操作来完成其他的任务。
线程(有时被称为轻量级进程)跟进程有些相似。不同的是,所有的线程运行在同一个进程中,共享相同的运行环境,我们可以想象成在主进程或者主线程运行中运行的迷你进程。一个进程中有多个线程共享通过一片数据空间,所以线程之间可以比进程之间更方便的共享数据及相互通信。
线程一般都是并发执行的,也就是因为这种并行和数据共享的机制使得多个任务的合作变的可能。但是,在但CPU得系统中,做到真正的并行是不可能的,每个线程会被安排成每次只运行一小会儿,然后将CPU让出来,让其他线程执行,在进程的整个运行过程中,每个线程都只做自己的事,在需要的时候跟其他的线程共享运行的结果。
同时在共享数据的时候注意竞态条件等问题。
在Python中提供给我们两个用于多线程编程的模块:Thread模块和Threading模块
不过我们建议使用Threading模块,原因是,Threading模块更高级别,更高级别的Threading模块更为先进。对于线程的支持更为先进,同时,使用Thread模块里面的属性有可能会与Threading模块出现冲突,其次,低级别的Thread模块的同步原语很少,Threading模块确有很多。
不建议使用Thread模块的另一个原因是,Thread模块不支持守护线程。当主线程 退出时,所有的子线程不论他们是否还在工作,都会被强行退出。</