进程和线程都是由操作系统控制调度的, 协程是是函数级别的调度,可以由程序员写代码控制
python中使用async和await两个关键字来支持原生协程
# python后期使用async和await两个关键字来定义协议, 这样就可以与生成器表示区别开来, 语义也更加明确 # 底层也是使用生成器来实现协程的 # 协议是函数级别的 # async 使用这个关键字定义一个协程 # await 相当于生成器的yield from async def downloader(url): # to do something return 'html content' async def download_url(url): # to do something html = await downloader(url) return html if __name__ == '__main__': coro = download_url('http://www.baidu.com') try: coro.send(None) except StopIteration as e: print(e.value) #html content
协程的性能并不比epoll+回调+事件循环的方式高
协程主是是解决编码习惯问题, 使用协程可以不用写回调函数
日拱一卒无有尽,功不唐捐终入海