協程相比執行緒切換操作不耗費資源,執行緒的切換需要儲存和恢復上下文,並且每個執行緒都有自己的cache快取,比較好效能
執行緒切換導致**碎片化,每次都要判斷是否要切換,
協程只需要把所有的操作弄到一起,有乙個耗時操作就切換到下乙個操作繼續執行
執行緒的問題在於他不會主動觸發排程器,尤其是cpu密集型的,沒有io操作
greenlet模組和gevent模組
greenlet需要根據程式的設計,即認為的切換協程
gevent是有耗時操作自動切換
from gevent import monkey;
import gevent
import urllib2
#有io才做時需要這一句
monkey.patch_all()
def mydownload(url):
print('get: %s' % url)
resp = urllib2.urlopen(url)
data = resp.read()
print('%d bytes received from %s.' % (len(data), url))
gevent.joinall([
gevent.spawn(mydownload, ''),
gevent.spawn(mydownload, ''),
gevent.spawn(mydownload, ''),
])
python協程 asyncio 的認識
import time import asyncio async defcountdown number,n while n 0 print t minus n,format number await asyncio.sleep 1 n 1 方式一 start time.time loop asyn...
程序 執行緒 協程的認識
1 程序 1 作業系統資源分配的基本單位。2 程序狀態 阻塞 就緒和執行。3 每個程序都有自己獨立的程序位址空間。4 乙個程序崩潰了,不影響其他程序。5 程序建立 切換和銷毀等開銷大。6 程序間通訊,效率低。2 執行緒 1 作業系統排程的基本單位。2 執行緒獨有的資源,主要為了執行緒切換時,保留tc...
協程巢狀協程
import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...