協程的認識

2021-08-25 22:47:59 字數 717 閱讀 5964

協程相比執行緒切換操作不耗費資源,執行緒的切換需要儲存和恢復上下文,並且每個執行緒都有自己的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...