學習一下muduo網絡庫(一)

前言

       我是跟着陳碩大神的《Linux多線程服務端編程:使用muduo C++網絡庫》書學習muduo的。
       書看了不到1/3,一直對着書和代碼學習,還是有些累的,而且根據我以往的經驗,我看書看完後,一般就不去管它了,久而久之,我就忘記了我看過/學過的內容了(我一直都覺得我的記憶力只有7天),因此我打算寫寫自己至今的讀書心得吧
       書中拋出了許多多線程編程方面的思考,需要慢慢理解。
       muduo中也有許多C++11的編程技巧和編程思想。
       解決問題時,要解決的子問題,以及提出的解決方案可能帶來的新問題。
       要實現一個功能,要考慮設計這個功能時,可能會遇到的問題,該怎麼解決呢?爲什麼這樣解決比較好呢?

muduo分爲基礎庫(base)和網絡庫(net)兩大部分

muduo/base下的頭文件
這些頭文件的文件名也對應了muduo庫在base文件夾下實現的功能

├── AsyncLogging.h					異步日誌backend:採用可擴充的Buffer塊
├── Atomic.h						原子操作與原子整數
├── BlockingQueue.h					無界阻塞隊列(生產者消費者隊列):用鏈表實現(猜測)
├── BoundedBlockingQueue.h			有界阻塞隊列:用數組實現(猜測)
├── Condition.h						條件變量,需與Mutex.h一同使用:封裝系統調用
├── copyable.h						用於標識值類型(可複製)
├── CountDownLatch.h				倒計時門閂
├── CurrentThread.h					當前線程工具函數,實現方式值得學習
├── Date.h							Julian日期庫(即公曆)
├── Exception.h						帶stack trace的異常基類
├── FileUtil.h                                    
├── GzipFile.h
├── LogFile.h
├── Logging.h						簡單的日誌,可搭配AsyncLogging使用
├── LogStream.h      
├── Mutex.h							互斥器:封裝系統調用
├── noncopyable.h					用於標識對象類型(不可複製)
├── ProcessInfo.h					進程信息
├── Singleton.h						線程安全的singleton
├── StringPiece.h					Google開源代碼中用於字符串參數傳遞的類型
├── Thread.h						線程對象:使用pthread_create庫調用
├── ThreadLocal.h					線程局部數據
├── ThreadLocalSingleton.h             
├── ThreadPool.h					固定大小線程池
├── Timestamp.h						UTC時間戳
├── TimeZone.h						時區與夏令時
├── Types.h							基本類型的聲明,包括muduo::string
└── WeakCallback.h

muduo/net下的頭文件
"##"標記的類爲用戶不可見的內部類

.
├── Acceptor.h						##接受器,用於服務端接受連接
├── boilerplate.h              
├── Buffer.h						緩衝區,非阻塞IO必備
├── Callbacks.h                     
├── Channel.h						用於每個Socket連接的事件分發
├── Connector.h						##連接器,用於客戶端發起連接
├── Endian.h						網絡字節序與本機字節序的轉換
├── EventLoop.h						事件分發器:一個線程只能有一個
├── EventLoopThread.h				新建一個專門用於EventLoop的線程
├── EventLoopThreadPool.h			muduo默認多線程IO模型
├── http							簡單的HTTP服務器實現
│   ├── HttpContext.h
│   ├── HttpRequest.h
│   ├── HttpResponse.h
│   ├── HttpServer.h
│   └── tests
├── InetAddress.h					IP地址的簡單封裝
├── inspect							窺探器,用於報告進程狀態
│   ├── Inspector.h
│   ├── PerformanceInspector.h
│   ├── ProcessInspector.h
│   ├── SystemInspector.h
│   └── tests
├── poller							##poll(2)和epoll(4)兩種IO multiplexing後端
│   ├── EPollPoller.h
│   └── PollPoller.h
├── Poller.h						##IO multiplexing的基類接口
├── protobuf
│   ├── BufferStream.h
│   └── ProtobufCodecLite.h
├── protorpc
│   ├── google-inl.h
│   ├── RpcChannel.h
│   ├── RpcCodec.h
│   └── RpcServer.h
├── Socket.h						##封裝Sockets描述符,負責關閉連接
├── SocketsOps.h					##封裝底層的Sockets API
├── TcpClient.h						TCP客戶端
├── TcpConnection.h					封裝TCP連接
├── TcpServer.h						TCP服務器
├── Timer.h							##定時器
├── TimerId.h						定時器Id:用於唯一標識定時器
├── TimerQueue.h					##定時器隊列:按照過期時間排序,越早過期排的越靠前
└── ZlibStream.h

net庫下頭文件包含關係

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章