IO多路複用 基於IO的單執行緒併發 協程
阿新 • • 發佈:2020-09-10
https://www.cnblogs.com/nianshaoyouwei/p/9642991.html
一. IO多路複用
檢測多個socket是否已經發生變化(是否已經連線成功/是否已經獲取資料)(可讀/可寫)
作業系統檢測socket是否發生變化,有三種模式:
select:最多1024個socket;迴圈去檢測.
poll:不限制監聽socket個數;迴圈去檢測(水平觸發).
epoll:不限制監聽socket個數;回撥方式(邊緣觸發).
Python模組:
select.select
select.epoll
二.基於IO多路複用+socket實現併發請求
IO多路複用+socket非阻塞+捕獲異常(BlockingIOError)
此方法稱為基於事件迴圈實現的非同步非阻塞框架(非阻塞:不等待 非同步:執行完某個人物後自動呼叫我給他的函式.)
python中開源模組 Twisted
三.協程.
1.什麼是協程
協程也可以稱為"微執行緒",就是開發者控制執行緒執行流程,控制先執行某段程式碼然後再切換到另外函式執行程式碼...來回切換.
2.協程可以提高併發嗎
協程自己本身無法實現併發,但協程+IO切換效能可以提高.
3.單執行緒提高併發:
協程+IO切換:gevent
基於事件迴圈的非同步非阻塞框架:Twisted
4.手動實現協程:yield關鍵字生成器
def f1(): print(11) yield print(22) yield print(33) def f2(): print(55) yield print(66) yield print(77) v1 = f1() v2 = f2() next(v1) # v1.send(None) next(v2) next(v1) next(v2) next(v1) next(v2)