【python】多线程的概念及应用

一.什么是多线程?
一个进程可以有多个线程,共享一个进程的资源;
➢线程是一个进程的实体,一个进程可以拥有多个线程,一个线程必须有 一个父进程。
线程是由表示程序运行状态的寄存器(如程序计数器、栈指 针)以及堆栈组成,它是比进程更小的单位。
➢线程是程序中的一个执行流。一个执行流是由CPU运行程序代码并操作 程序的数据所形成的。因此, 线程被认为是以CPU为主体的行为
➢线程不包含进程地址空间中的代码和数据,线程是计算过程在某一时刻 的状态。所以,系统在产生一个线程或各个线程之间切换时,负担要比进 程小得多。 并发执行,要使用多进程;
➢线程是一个用户级的实体,线程结构驻留在用户空间中,能够被普通的 用户级函数直接访问。
➢一个线程本身不是程序,它必须运行于一个程序(进程)之中。因此, 线程可以定义为一个程序中的单个执行流。
多线程是指一个程序中包含多个执行流,多线程是实现并发的一种有效手 段。一个进程在其执行过程中,可以产生多个线程,形成多个执行流。每 个执行流即每个线程也有它自身的产生、存在和消亡的过程。
•多线程程序设计的含义就是可以将程序任务分成几个并行的子任务。

二.线程和进程的区别
进程是资源分配的最小单位,线程是程序执行的最小单位
➢ 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表 来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使 用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程 的开销也比进程要小很多。 ➢ 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间 的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难 点。
➢ 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进 程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

服务器端测试:框架要点,灰盒测试,基于涉及文档(概要设计),接口的输入输出

三.线程的状态图


四.Python线程
Python中一些线程模块:
 thread(低版本使用,已废弃)
 threading
 Multiprocessing
这里我们只介绍threading模块。

五.Python线程threading模块
Threading模块提供的类:
Thread,Lock,Rlock,Condition,Semaphore,Event,Timer,local等。
threading模块提供的常用方法:
✓ threading.currentThread(): 返回当前的线程变量。
✓ threading.enumerate(): 返回一个包含正在运行的线程的list。
正在运行指线 程启动后、结束前,不包括启动前和终止后的线程。
✓ threading.activeCount():返回正在运行的线程数量,与 len(threading.enumerate())有相同的结果

六.线程类(Thread)
thread模块是Python低版本中使用的,高版本中被threading代替了。
threading模块提供了更方便的API来操作线程。
Thread是threading模块中最重要的类之一,可以使用它来创建线程。
该类创建线程有有两种方式:
1.直接创建threading.Thread类的对象,初始化时将可调用对象作为参数传入。
2.通过继承Thread类,重写它的run方法。
Thread类的构造方法:
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None)
参数说明:
•group:线程组,目前还没有实现,库引用中提示必须是None;
•target:要执行的方法;
•name:线程名;
•args/kwargs:要传入方法的参数。

猜你喜欢

转载自blog.csdn.net/qq_30758629/article/details/80999072