協程和IO模型

2022-08-05 13:54:19 字數 1885 閱讀 5775

協程

1.什麼是協程

單執行緒實現併發

在應用程式裡控制多個任務的切換+儲存狀態

優點:應用程式級別速度要遠遠高於作業系統的切換

缺點:多個任務一旦有乙個阻塞沒有切,整個執行緒都阻塞在原地

該執行緒內的其他的任務都不能執行了

一旦引入協程,就需要檢測單執行緒下所有的io行為,實現遇到io就切換,少乙個         都不行,因為一旦乙個任務阻塞了,整個執行緒就阻塞了,其他的任務即便是可以計算,         但是也無法執行了

2.協程的目的:

想要在單執行緒下實現併發

併發指的是多個任務看起來是同時執行的

併發 = 切換+儲存狀態

3.協程的應用

from gevent import

monkey,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,)

print

(current_thread().name)

g1.join()

g2.join()

io模型

recvfrom:

wait data:等待客戶端產生資料-->客戶端os-->網路-->服務端作業系統

copy data:由本地作業系統快取中的資料拷貝到應用程式的記憶體中

send:

copy data

非阻塞io模型

import

socket

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...