学习一下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库下头文件包含关系

在这里插入图片描述

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