一、網絡編程:編程
socket----recv send方法網絡
socketserver---多線程下的socket多線程
接收大數據--方式:先發送長度,接收端接收該長度異步
防止粘包---方式1,發送接收交替進行 方式2,最後一次接收可變長度socket
二、多線程大數據
threading---啓動多線程方法,join線程
守護線程--setDemo(True)主線程結束,啓動的守護線程跟着結束server
GIL鎖---同一時刻只有一個線程得到CPU計算資源。一、獲取時間片二、得到GIL鎖 在單核處理器上第2個條件永遠知足協程
互斥鎖--同一時刻只有一個線程修改共享變量遞歸
遞歸鎖--聲明同一個鎖進嵌套的三個門,這個鎖就要用遞歸鎖
信號量--同一時刻運行n個線程修改共享變量 n=1,2,3,4...
多線程的協調--event,set標誌位,clear標誌位,wait標誌位,isset方法。 若是標誌位isset就前進,不然停下wait標誌位
三、生成者消費者隊列
生產者能夠有多個線程,消費者能夠多個線程。消費者者不停處理隊列中的數據,生產者不停往隊列裏放數據
四、多進程
multiprocessing--父進程ID:os.getppid() 本進程ID:os.getpid() 進程佔資源不能無限啓動,有進程池:只能同時運行n個進程。
進程間數據傳遞:Queue、Pipe 進程間數據共享:Manager
五、協程
gevent---是對greenlet的封裝,greenlet有switch方法,遇到IO手動切換,gevent是對其的封裝,能夠自動檢測到IO自動切換
gevent有joinall方法,標記IO操做:monkey.patch_all()
六、協程的實現
數據的內核態,用戶態。拿recv方法來講,send完成後recv的數據就準備好了,調用recv方法就將數據從內核內存空間拷貝到用戶內存空間。
阻塞IO(沒數據接收就阻塞) 非阻塞IO(沒數據接收拋異常) 同步IO(阻塞IO,非阻塞IO,IO多路複用/事件驅動型IO 都是同步IO) 異步IO(徹底不阻塞理論上的)
協程的實現方式:IO多路複用。 遇到一個IO就註冊一個事件,監測這些事件,執行完成的就返回
IO多路複用三種實現方式:select、poll、epoll
epoll和gevent同樣, 在Linux底層都是libevent.so實現的