python:多线程

1.线程基础

  一般程序设计有:“单进程多线程/单进程单线程(默认)/多进程中每个进程单线程/多进程多线程”,这里只讨论“单进程多线程”

  线程在程序设计中是十分重要的,例如在电脑上看电影,就必须由一个线程播放视频,另一个线程播放音频,否则,单线程实现的话就只能先把视频播放完再播放音频,或者先把音频播放完再播放视频,这显然是不行的。

  这里需要用到操作系统的知识,一个线程本身是不拥有计算机资源的,进程控制块(PCB)是计算机拥有资源的最小单位(可以理解为进程是拥有计算机资源的最小单位,所谓资源例如cpu使用权,内存空间,寄存器等)。线程只能在进程之中运行,它们根据一定策略轮换的使用进程的资源运行,因此,对于一个应用程序,我们的线程就是活在它的生命周期中,当进程撤销,线程也消失。因为线程不占据资源而是使用进程的资源,所以它的创建销毁的开销都远远小于进程,速度也更快。

  因为在同一个进程中,所以多个线程共享相同的内存空间,不同的线程可以存取内存中的同一个变量,所以,程序中的所有线程都可以读或写进程程序代码中声明过的全局变量,这在一方面是一种非常快捷的通信方式。(进程之间由于不共享内存空间,通信需要专门的方法)

  

  每个线程都有他自己的一组CPU寄存器,称为线程上下文,线程上下文反映了线程上次运行该线程的CPU寄存器的状态用于恢复环境。指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程在线程上下文更是在进程上下文中运行的。

 2.使用线程

  Python的标准库提供了两个模块:threadthreadingthread是低级模块,threading是高级模块,对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。这里不再赘述使用方法,主要目的是进入我们的ThreadLocal的学习

3.特殊的线程ThreadLocal

  这个线程机制在flask的request_context中使用的很频繁,其实这是一种很经典的线程隔离模式,在java中广泛应用,同样python加入了他的ThreadLocal实现。

原文地址:https://www.cnblogs.com/DylanHooz/p/8437146.html