什么是线程
进程和线程都是虚拟的单位,都是用来帮助我们形象的描述某种事物
进程是资源分配的最小单位,线程是cpu调度的最小单位,每一个进程中至少有一个线程,进程只是在线程运行过程中提供代码运行所需的资源
将内存比作工厂,那么进程就相当于工厂的车间,而线程就相当于车间内的流水线
为什么要有线程
进程
一个进程只能在一个时间干一件事,如果想干多件事,进程就无能为力了
开一个进程需要开辟一个新的内存空间,将代码丢进去执行,这是一件十分耗费资源的事
线程
一个进程中可以开多个线程,并且线程和线程之间的数据也是共享的
开启线程的资源耗费是远远小于开启一个进程的
进程和线程的区别:
1.地址空间的区别和资源之间的共享
2.通信:进程间通信要通过队列来实现,而线程之间可以直接读写所处进程中的数据来通信
3.调度和切换:线程的调度切换比进程快的多
4.在多线程操作系统中,进程不是一个可执行的实体
2.创建线程的两种方式
和创建进程类似,创建线程也有两种方式
1 from threading import Thread 2 import time 3 4 def task(name): 5 print('%s开始'%name) 6 time.sleep(1) 7 print('%s结束'%name) 8 9 # 线程的代码块不需要写在__main__内,但是我们还是习惯性的写在里边 10 t = Thread(target=task,args=('sxc',)) 11 t1 = Thread(target=task,args=('zzj',)) 12 t.start() 13 t1.start() 14 print('主')
1 from threading import Thread 2 import time 3 4 class MyThread(Thread): # 新建一个类继承父类Thread的方法 5 def __init__(self,name): 6 super().__init__() 7 self.name = name 8 9 def run(self): 10 print('%s开始'%self.name) 11 time.sleep(1) 12 print('%s结束'%self.name) 13 14 if __name__ == '__main__': 15 t1 = MyThread('sxc') # 类名加括号实例化对象 16 t2 = MyThread('zzj') 17 t1.start() 18 t2.start() 19 print('主')