什么是多任务,多任务的概念是什么
1 多任务解析
什么是多任务呢?简单的说,就是操作系统可以同时运行多个任务,现在,多核CPU已经非常普及了,但是,即使过去的单核CPU也可以执行多任务。由于cpu执行代码都是顺序执行的,那么单核CPU是是怎么执行多任务的呢?
2 多任务的表现形式
window下打开任务管理器我们可以很清晰的看到多个进程在同时执行任务,qq,微信等都是多进程的形式寄存在window下,大多我们在写一些控制台程序真正执行的时候都是以进程调度。
3 python默认是单任务
很显然刚刚的程序并没有完成唱歌和跳舞同时进行的要求
如果想要实现“唱歌跳舞”同时进,那么就需要一个新的方法,叫做:多任务
线程
线程的概念
线程,有时候被称为轻量级进程(Lightweight Process, LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指针(PC),寄存器集合和堆栈组成。另外线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
主线程:
当一个程序启动时,就有一个进程被操作系统(os)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程
主线程重要性的两个方面:
1. 是产生其子线程的线程
2. 通常他必须最后完成执行,比如执行各种关闭的动作
子线程
可以看做是执行程序的一条分支,当子线程启动后会和主线程一起同时执行
1 单线程执行
2 使用threading模块 创建子线程
python的therad模块是比较底层的模块,python的threading模块是对thread做了一些包装的。可以更加方便的使用。
2.1 核心方法
threading.Thread(target =函数名字) threading模块的thread类 创建子线程对象
线程对象.start()启动子线程
2.2 代码实现
使用这样的方法可以明显感觉到速度变得很快。
说明:
1.可以明显看出使用多线程的并发操作,花费时间要短很多
2. 当调用start()s时,才会真正的创建先线程,并且开始执行
3. 每个线程都有一个唯一标识符,来区分线程中的主次关系
4. 主线程:main Thread,main函数或者程序主入口,都可以成为主线程
5. 子线程:Thread-x使用threading.Thread()创建出来的都是子线程
6. 线程数量:主线程数+子线程数
3. 主线程会等待所有的子线程结束后才结束
import threading
from time import sleep,ctime
def sing():
"""唱歌"""
for i in range(3):
print('正在唱歌')
time.sleep(0.5)
def dence():
"""跳舞函数"""
for i in range(3):
print('正在跳舞')
time.sleep(0.5)
if __name__ == "__main__":
print('-----开始-----:%s'%ctime())
t1 = threading.Thread(target=sing)
t2 = threading.Thread(target=dence)
t1.start()
t2.start()
# sing()
# dence()
print('------结束-----:%s'%ctime())
巩固学习视频总结记录。