一、多任务引入
1、多任务
a>多任务的概念:计算机同时执行多个任务,多任务程序:该程序的多个任务同时在运行,就是多任务
b>多任务的作用:1、提升程序的执行效率
2、更充分利用CPU的资源
2、并行与并发
并行:当任务数小于或者等于CPU核数时,每一个任务都有对应的CPU来处理执行,即任务真的是一起执行的
并发:任务数多于CPU核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)
二、多线程实现多任务
1、对线程的理解:
1、一个程序运行起来至少有一个进程,一个进程至少有一个线程
2、处理器CPU分配给线程,即CPU真正运行的是线程中的代码
3、分配CPU给线程时,是通过时间片轮训方式进行的
4、进程是操作系统分配程序执行资源的单位,而线程是进程的一个实体,是CPU调度和分配的单位
2、两种创建多线程的方式:
a>创建函数并且传入Thread对象中
实现步骤:
1、导入模块threading
2、准备函数
3、通过threading.Thread()创建线程对象
4、执行新创建的线程对象
参考代码如下:
b>创建Thread类子类,将要执行的代码写到run函数里面
实现步骤:
1、导入模块Threading
2、创建类,继承threading.Thread
3、重新run方法,把线程要执行的代码封装到该方法中
4、执行线程
参考代码如下:
三、线程注意点:
1、子线程的开启与结束
当调用了start方法后,就开启了子线程,且立即执行子线程中的代码,当子线程代码执行完毕后,立即结束子线程
2、主线程在所有子线程都结束完毕后,主线程才会结束
3、Thread.join()与threading.enumerate()
前者是阻塞当前线程(主线程),当前子线程执行完毕,再解阻塞对应的主线程,执行当前线程后续代码
五、多线程-共享全局变量
如果多个线程同时对同一个全局变量操作,会出现资源竞争问题,从而数据结果会不正确,即会遇到线程安全问题
六、同步的概念
同步(synchronize)
协同步调,按预定的先后次序进行运行,比如:一个任务执行完,另一个任务再执行
在多线程编程中,一些敏感数据不允许被多个线程同时访问,因为会出现线程安全问题,通过线程同步机制,能保证共享数据在任何时刻,最多有一个线程访问,以保证数据的正确性,线程同步,就是线程排队
七、互斥锁
1、互斥锁是线程同步的一种实现方法
2、实现互斥锁步骤:
1、取得锁:
mutexlock=threading.lock()
2、加锁
mutexlock.acquire()
3、解锁,释放锁
mutexlock.release()