進程 數據隔離 數據不安全 操作系統級別 開銷非常大 能利用多核
線程 數據共享 數據不安全 操作系統級別 開銷小 不能利用多核
正常的開發語言,多線程可以利用多核
cpython解釋下的多個線程不能利用多核:規避了所有的io操作的單線程
協程 數據共享 數據安全 用戶級別 跟小 不能利用多核 協程的所有切換基於用戶,只有用戶能感知到的io操作才會用協程模塊做切換規避(網絡操作,socket,請求網頁的)
是操作系統不可見的
協程本質就是一條線程,多個任務在一條線程來回切換,來規避io操作,就達到了我們將一條線程中的io操作系統降到最低的目的
切換 並 規避io的兩個模塊
gevent = 利用了 greenlet 底層模塊完成的切換 + 自動規避io的功能
asyncio = 利用了 yield 底層語法完成的切換 + 自動規避io的功能
tornado 異步的web框架
yield from 更好的實現協程
send - 更好的實現協程
asyncio模塊 基於python原生的協程的概念正式的被成立
特殊的在python中提供協程功能的關鍵字:aysnc await
用戶級別的協程的好處:
減輕了操作系統的負擔
一條線程如果開了多個協程,那么給操作系統造成線程很忙的假象,這樣能多爭取時間來cpu計算