一,并发与并行
并发:CPU使用一个核心在各程序之间交替执行,形成一种让人以为程序同时运行的错觉,并不会真正的提升执行效率和速度
并行:CPU使用多个核心同时执行多个程序,各程序指令运行在不同的CPU内核上面,程序平行的向前推进,可以真正的提升执行速度
二,遗留问题
Python多线程只能使用一个核心,解释器的设计遗留问题
利用CPU多核只能通过多进程,或者在线程中使用C语言扩展
三,使用ThreadLocal来读写全局变量
多线程共享全局变量,非常容易把全局变量改乱,所以在全局变量声明ThreadLocal对象实例(可以理解为一个dict),在其对象上绑定的所有属性数据,在每个线程中都是独立的,不同的
ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等
四,线程对比进程
多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。
首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。
如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。
如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker。
多进程模式