async/await 这个协程 异步为什么对磁盘 io 无效?
import asyncio
async def wr1():
# f = open('text1.txt','w')
# for x in range(1,39999999):
# f.write('12345ddd')
# f.close()
f = open('text3.txt','r')
print(f.read())
f.close()
async def wr2(): # f = open('text2.txt','w') # for x in range(1,79999999): # f.write('23456fff') # f.close()
for x in range(1,519999):
print('xx')
async def wr3(): # f = open('text3.txt','w') # for x in range(1,99999999): # f.write('34567ggg') # f.close()
for x in range(1,919999):
print('yy')
def demo4():
async def washing1():
await wr1()
async def washing2():
await wr2()
async def washing3():
await wr3()
# 1. 创建一个事件循环
loop = asyncio.get_event_loop()
# 2. 将异步函数加入事件队列
tasks = [
washing1(),
washing2(),
washing3(),
]
# 3. 执行事件队列, 直到最晚的一个事件被处理完毕后结束
loop.run_until_complete(asyncio.wait(tasks))
# 4. 如果不再使用 loop, 建议养成良好关闭的习惯
loop.close()
if name == 'main': start = time()
demo4()
end = time()
print('elapsed time = ' + str(end - start))
第一段是读取磁盘,第二第三段是打印。按道理遇到 io,dma 交出总线,cpu 就空运转直到有数据才工作,所以 wr1 应该和 2 或 3 一块执行才对的,而实际情况不是这样的,是跟单线程同步执行一样的所需时间
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.