1、介绍
线程(Thread):是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。 一个标准的线程线程ID、当前指令指针(PC)、寄存器和堆栈组成。
线程的特征:
1.轻型实体
2.独立调度和分派的基本单位。
3.可并发执行。
4.共享进程资源。线程的优点:
1.创建一个新线程的代价要比创建一个新进程小的多
2.线程之间的切换开销小。
3.线程占用的资源要比进程少很多
4.能充分利用多处理器的可并行数量。
5.等待慢速 IO操作结束以后,程序可以执行其他的计算任务。
6.计算(CPU)密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现。
7.IO密集型应用,为了提高性能,将IO操作重叠,线程可以等待不同的IO操作。线程的缺点:
1.性能损失
2.健壮性降低
3.缺乏访问控制
2、代码演示
1.方式一:
# -*- coding:utf8 -*-
import time
from threading import Thread
def func1(name):
print(f'{name}请求中....')
time.sleep(2)
print(f'{name}请求完毕')
if __name__ == '__main__':
# 创建线程t1、t2
t1 = Thread(target=func1, args=('t1', ))
t2 = Thread(target=func1, args=('t2', ))
# 开启线程
t1.start()
t2.start()
# 等待线程执行完
t1.join()
2.方式二:
# -*- coding:utf8 -*-
import time
from threading import Thread
class MyThread(Thread):
def __init__(self, name):
Thread.__init__(self)
self.name = name
# run()固定方法
def run(self):
print(f"Thread {self.name} start")
time.sleep(2)
print(f"Thread {self.name} over")
if __name__ == '__main__':
# 创建线程
t1 = MyThread('t1')
t2 = MyThread('t2')
# 启动线程
t1.start()
t2.start()
t1.join()
t2.join()