import time
import asyncio
#并行处理的几种方式
#多进程,消耗更多资源(独立内存空间,文件描述符)(几十个上百个),
# 切换成本高(整个进程上下文,内存空间),
# 通讯成本高(管道,队列),安全性高
#多线程,消耗较少资源(共享内存空间)(几千个),
# 切换成本低(只需保存少量寄存器内容)(内核态,微秒级),
# 通讯成本低(共享内存),安全性较低
#协程,资源消耗极少(极少量内存)(几十万个),
# 切换成本低(只需切换寄存器内容)(用户态,纳秒级),
# 通讯成本低(共享内存,无需内核介入),安全性较高
#普通任务
def do_some_thing(i):
print("开始执行任务:"+str(i))
time.sleep(5)
print("已经完成任务" + str(i))
#协程任务
async def do_some_thing_asynic(i):
print("开始执行任务:"+str(i))
await asyncio.sleep(5)
print("已经完成任务" + str(i))
#多进程
from multiprocessing import Process
def test_multi_process():
for i in range(10):
t = Process(target=do_some_thing, args=(i,))
t.start()
#多线程
import threading
def test_multi_thread():
for i in range(10):
t = threading.Thread(target=do_some_thing, args=(i,))
t.start()
#协程
async def test_asyncio():
tasks = []
for i in range(10):
tasks.append(do_some_thing_asynic(i))
await asyncio.gather(*tasks)
if __name__ == '__main__':
#test_multi_process()
#test_multi_thread()
asyncio.run(test_asyncio())