前言
什么是I/O?
I/O中文意思是输入/输出,英文意思是Input/Output,我们平时所说的I/O操作其是指2个动作3个步骤。
步骤1:输入指令
步骤2:等待结果返回
步骤3:结果返回之后输入
在使用Python编程时无论是多线程还是协程技术都是围绕如何充分利用步骤2的等待时间来展开。
如果I/O操作时Input和Output这两个动作就是异步的(异步I/O),那我们就可以在Python中使用 asyncio模块(ayncy+await关键字+事件循环机制)实现协程。
如果I/O是同步的,我们只能使用多线程和多进程花费更多的系统资源去实现异步效果来规避步骤2的等待时间。
还记得gevent协程模块里面的monkey_patch吗?
它就是帮我们把现有的同步I/O模块改装成异步I/O模块的。
什么是协程?
线程和进程并非操作系统提供的,协程则是程序员创造出来的微线程。
协程是1种用户态的上下文切换技术,在遇到I/O操作时,协程可以在1个线程的不同代码块中来回切换。
其宗旨和线程一样是为了规避I/O操作时 等待结果返回的步骤 ,和多线程相比协程由于是单线程,它使用的资源比较小。
async def print_hello(): while True: print("1") await asyncio.sleep(1) print("2") async def print_goodbye(): while True: print("3") await asyncio.sleep(1) print("4") #async 函数返回1个协程对象 corutine1=print_hello() corutine2=print_goodbye() #获取事件循环 loop=asyncio.get_event_loop() #开始监听事件 loop.run_until_complete(asyncio.gather(corutine1,corutine2))