为什么使用多任务?有什么好处?
答:提高程序执行效率,实现同一时刻可以做二个以上的事情。
啦啦啦。。。重点来了
并行:任务数大于CPU核数,每个CPU就要执行多个任务,那肯定忙不过来,多个任务执行就需要排队等待上一任务执行完,才能执行下一任务。
并发:任务数小于或等于CPU核数,每个CPU就只需只需一个任务(小于时,有的CPU不执行任务)。
1,线程:CPU调度的最小单位。我的理解是CPU执行代码的那一条线索。
创建线程:
代码语言:javascript复制 1 import threading
2
3
4 def f1():
5 for i in range(100):
6 print('线程1:{}'.format(i))
7
8
9 def f2():
10 for i in range(100):
11 print('线程2:{}'.format(i))
12
13
14 if __name__ == '__main__':
15 t1 = threading.Thread(target=f1)
16 t2 = threading.Thread(target=f2)
17 t1.start()
18 t2.start()
上述结果:线程是相互竞争资源的。
2,进程:CPU分配资源的最小单位,我的理解是程序运行起来,代码 运行用到的资源为进程。进程有三个状态:就绪态(满足一切条件等待CPU执行),等待态(阻塞等待如:input(),accept(),yield等),执行态(CPU正在执行其功能)
创建进程:
代码语言:javascript复制 1 from multiprocessing import Process
2
3
4 def f1(msg):
5 for i in range(100):
6 print(msg ':{}'.format(i))
7
8
9 def f2(msg):
10 for i in range(100):
11 print(msg ':{}'.format(i))
12
13
14 if __name__ == '__main__':
15 p1 = Process(target=f1, args=('线程1',))
16 p2 = Process(target=f2, args=('线程2',))
17 p1.start()
18 p2.start()
3,协程:协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。
创建协程:
代码语言:javascript复制 1 import time
2
3
4 def fn1():
5 while True:
6 print("----任务1-----")
7 yield
8 time.sleep(1)
9
10
11 def fn2():
12 while True:
13 print("----任务2-----")
14 yield
15
16
17 def main():
18 work1 = fn1()
19 work2 = fn2()
20
21 while True:
22 next(work1)
23 next(work2)
24
25
26 if __name__ == "__main__":
27 main()