进程 数据隔离 数据不安全 操作系统级别 开销非常大 能利用多核
线程 数据共享 数据不安全 操作系统级别 开销小 不能利用多核
正常的开发语言,多线程可以利用多核
cpython解释下的多个线程不能利用多核:规避了所有的io操作的单线程
协程 数据共享 数据安全 用户级别 跟小 不能利用多核 协程的所有切换基于用户,只有用户能感知到的io操作才会用协程模块做切换规避(网络操作,socket,请求网页的)
是操作系统不可见的
协程本质就是一条线程,多个任务在一条线程来回切换,来规避io操作,就达到了我们将一条线程中的io操作系统降到最低的目的
切换 并 规避io的两个模块
gevent = 利用了 greenlet 底层模块完成的切换 + 自动规避io的功能
asyncio = 利用了 yield 底层语法完成的切换 + 自动规避io的功能
tornado 异步的web框架
yield from 更好的实现协程
send - 更好的实现协程
asyncio模块 基于python原生的协程的概念正式的被成立
特殊的在python中提供协程功能的关键字:aysnc await
用户级别的协程的好处:
减轻了操作系统的负担
一条线程如果开了多个协程,那么给操作系统造成线程很忙的假象,这样能多争取时间来cpu计算