前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多任务中进程、线程、协程

多任务中进程、线程、协程

作者头像
py3study
发布2020-01-19 14:36:14
3600
发布2020-01-19 14:36:14
举报
文章被收录于专栏:python3python3

为什么使用多任务?有什么好处?

答:提高程序执行效率,实现同一时刻可以做二个以上的事情。

啦啦啦。。。重点来了

并行:任务数大于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()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档