========階段性回顧======

一、網絡編程:編程

    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實現的

相關文章
相關標籤/搜索