日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型

發布時間:2024/4/18 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第3章 多線程服務器的適合場合與常用編程模型

3.1 基本概念

  • 同步和異步

    針對程序和內核的交互

    • 同步:用戶進程觸發IO操作,等待或輪詢的查看IO是否就緒

    • 異步:用戶進程觸發IO操作,繼續做自己的事情,當IO操作完成通知進程

  • 阻塞和非阻塞

    針對進程在訪問數據,更具IO的狀態采取不同的方式

    • 阻塞:數據的讀寫會一直等待
    • 非阻塞:數據的讀寫會立即返回狀態值
  • IO模型

    • 同步阻塞IO:用戶進程發起IO操作,阻塞等待IO的完成,之后繼續運行剩下的程序,浪費CPU資源
    • 同步非阻塞IO:用戶進程發起IO操作,可以返回做其他的事情,需要用戶進程不斷詢問IO操作是否就緒,浪費比必要的CPU資源
    • 異步阻塞IO:用戶進程發起IO操作,不等待,當內核完成通知用戶進程,但通過select函數判斷文件描述符的狀態是阻塞的
    • 異步非阻塞IO:用戶進程發起IO操作,不等待,當內核完成通知用戶進程,對數據進行處理

3.2 單線程服務器的常用編程模型

  • non-blocking IO + IO multiplexing: 事件循環(event loop),事件驅動(event-driven)和事件回調的方式實現

  • Reactor模型

    • 優點:編程容易,效率高
    • 缺點:基于事件驅動的模型要求事件回調函數必須是非阻塞的,涉及到網絡IO請求響應式協議,容易割裂業務邏輯,使其分布在多個回調函數中,不容易理解和維護

3.3 多線程服務器的常用編程模型

  • 每個請求創建一個線程,使用阻塞式IO
  • 使用線程池,同樣使用阻塞式IO
  • non-blocking IO + IO multiplexing
  • Leader/Follower
  • 3.4 進程間通信只用TCP

    • 進程間通信(IPC):

      • 匿名管道(pipe)

      • 具名管道(FIFO)

      • POSIX消息隊列

      • 共享內存

      • 信號

      • Socket

    • 同步原語:

      • 互斥鎖(mutex)

      • 條件變量(condition variable)

      • 對寫鎖(reader-writer lock)

      • 文件鎖(record locking)

      • 信號量(semaphore)

    • TCPport有進程獨占,操作系統會自動回收, listening port和已建立連接的TCPsocket都是文件描述符,當進程結束會關閉所有的文件描述符。程序意外退出不會留下垃圾,程序重啟后比較容易恢復,不需要重啟系統。port的獨占可以防止程序重復運行

    • TCP長連接的好處:

      • 容易定位分布式系統中的服務之間的依賴關系
      • 通過接受和發送隊列的長度比較容易定位網絡或程序故障,正常情況netstat打印的Recv-Q和Send-Q都應該接近0,或在0附近擺動。Recv-Q保持不變或持續增加,通常意味著服務進程的處理速度變慢,可能發生阻塞或死鎖。如果Send-Q保持不變或持續增長,有可能對方服務器太忙、來不及處理,也有可能網絡中某個路由器或交換機故障造成丟包,甚至對方掉線
    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。