協程
1.什麼是協程
單執行緒實現併發
在應用程式裡控制多個任務的切換+儲存狀態
優點:應用程式級別速度要遠遠高於作業系統的切換
缺點:多個任務一旦有乙個阻塞沒有切,整個執行緒都阻塞在原地
該執行緒內的其他的任務都不能執行了
一旦引入協程,就需要檢測單執行緒下所有的io行為,實現遇到io就切換,少乙個 都不行,因為一旦乙個任務阻塞了,整個執行緒就阻塞了,其他的任務即便是可以計算, 但是也無法執行了
2.協程的目的:
想要在單執行緒下實現併發
併發指的是多個任務看起來是同時執行的
併發 = 切換+儲存狀態
3.協程的應用
from gevent importmonkey,spawn;monkey.patch_all()
from threading import
current_thread
import
time
defeat():
print('
%s eat 1
' %current_thread().name)
time.sleep(3)
print('
%s eat 2
' %current_thread().name)
defplay():
print('
%s play 1
' %current_thread().name)
time.sleep(1)
print('
%s play 2
' %current_thread().name)
g1=spawn(eat,)
g2=spawn(play,)
(current_thread().name)
g1.join()
g2.join()
io模型
recvfrom:
wait data:等待客戶端產生資料-->客戶端os-->網路-->服務端作業系統
copy data:由本地作業系統快取中的資料拷貝到應用程式的記憶體中
send:
copy data
非阻塞io模型
importsocket
server =socket.socket(socket.af_inet,socket.sock_stream)
server.bind((
'127.0.0.1
',8080))
server.listen(5)
server.setblocking(false)
conn_list =
while
true:
try:
print('
當前連線數%s
'%len(conn_list))
conn,client_addr =server.accept()
print('
連線成功')
except
blockingioerror:
del_conn =
for i in
conn_list:
try:
msg = i.recv(1024)
if len(msg) ==0:
continue
i.send(msg.upper())
except
blockingioerror:
pass
except
connectionreseterror:
for i in
del_conn:
conn_list.remove(i)
協程 IO模型
一 協程 1.定義 單執行緒實現併發,可以再應用程式當中控制多個任務的切換 儲存狀態。優點 在應用程式級別的速度要遠遠高於作業系統的切換 缺點 多個任務一旦有乙個任務阻塞住了,沒有及時切換,整個執行緒都將阻塞在原地,該執行緒內的其他任務都不能繼續執行了。所以,在引入協程之後,就需要檢測單執行緒下所有...
詳解協程,事件驅動模型,I O模型
什麼是事件驅動模型 協程介紹 協程是什麼 協程是微執行緒,他是一種使用者態的輕量級執行緒,它的好處是沒有執行緒切換的開銷,我們開多執行緒,執行緒的上下文切換是耗費cpu的開銷的,但是多協程裡邊,只是乙個控制流調到了另外乙個控制流,它還是單執行緒,所以協程很適合高併發,乙個cpu可以支援上萬的協程,因...
併發程式設計 協程 池,io模型
一 執行緒池 程序池 開程序 開執行緒都需要消耗資源,只不過兩者比較的情況執行緒消耗的資源比較少 在計算機能夠承受範圍之內最大限度的利用計算機 什麼是池?在保證計算機硬體安全的情況下最大限度的利用計算機 池其實是降低了程式的執行效率,但是保證了計算機硬體的安全 硬體的發展跟不上軟體的速度 呼叫fro...