
muduo
文章平均质量分 66
muduo库源码剖析
却道天凉_好个秋
这个作者很懒,什么都没留下…
展开
-
muduo网络库——通过宏定义封装函数返回值判断
函数返回值判断简单的封装原创 2023-02-26 20:58:25 · 258 阅读 · 0 评论 -
muduo网络库——TcpServer、Acceptor和TcpConnection
本文主要介绍的是muduo网络库对于tcp通信的相关处理及源码分析,关于tcp相关知识,可以参考:https://blog.youkuaiyun.com/www_dong/category_10706734.html模型tcp相关类说明:TcpConnection: TCP连接管理Acceptor: 接收连接Connector: 发起连接TcpServer: 管理Acceptor获取的连接实现流程:1)TcpServer构造时会创建Acceptor对象并设置新连接回调;2)Acceptor接原创 2022-04-12 13:13:20 · 1578 阅读 · 0 评论 -
muduo网络库——TimerQueue
模型实现流程:TimerQueue类主要用来设置超时任务,通过std::set数据结构来管理Timer。由于std::set的底层实现原理是二叉树,时间复杂度为O(logN), 其内部可以对管理的时间进行自动排序,这样优化了任务时间的排序流程,能方便且及时的查找出超时的任务,做相应删除等操作。源码分析TimerQueue构造函数如代码所示,在构造函数时即设置了Channel回调,Channel的对象由构造时传入,这样当Channel有通过Eventloop收到poller的激活事件回调时,即可原创 2022-04-08 20:53:52 · 537 阅读 · 0 评论 -
muduo网络库——Channel
模型实现流程:前面已经介绍了EPoller类,EPoller主要监听的是Channel对象,每一个Channel对象会绑定一个文件描述符(fd_),fd_上绑定要监听的事件。当epoll监听到就绪事件时,会将就绪事件添加到激活队列中,激活队列在事件循环(EventLoop的loop中)被循环调用,当激活队列不为空时,依次调用Channel注册的回调。源码分析updateupdate是对上提供的接口,主要调用的是EventLoop类的updateChannel接口将当前对象更新至poller。v原创 2022-04-07 19:28:42 · 620 阅读 · 0 评论 -
muduo网络库——EventLoop
模型实现流程:muduo网络库有一个事件驱动循环线程池EventLoopThreadPool,线程池中有多个事件驱动线程EventLoopThread,每个线程运行一个EventLoop事件循环,每个事件循环调用io多路复用的EPoller,EPoller可以监听多个Channel,每个Channel对应一个fd,在Channel被激活后调用回调函数,回调函数在EventLoop所在线程执行。源码分析构造函数EventLoop::EventLoop() : looping_(false),原创 2022-04-06 21:35:54 · 546 阅读 · 0 评论 -
muduo网络库——日志处理
测试程序#include "muduo/base/AsyncLogging.h"#include "muduo/base/Logging.h"#include "muduo/base/Timestamp.h"#include <stdio.h>#include <sys/resource.h>#include <unistd.h>off_t kRollSize = 500*1000*1000;muduo::AsyncLogging* g_asyncL原创 2022-04-05 20:07:22 · 1543 阅读 · 0 评论 -
muduo网络库——WeakCallback
std::shared_ptr存在的问题关于std::shared_ptr存在的问题,可以参考这篇文章:muduo网络库——enable_shared_from_this和弱回调_却道天凉_好个秋的博客-优快云博客WeakCallback用std::weak_ptr保存一个对象object,std::function保存一个不定参数的函数对象function,并重载函数调用运算符operator(),用于安全地将object作为function的参数来调用。template<typ原创 2022-04-04 16:48:41 · 360 阅读 · 0 评论 -
muduo网络库——poller
前言muduo网络库的多路复用是封装的poll和epoll,而基类poller提供了统一的接口。关于select/poll/epoll的介绍,可以参考:linux进阶09——I/O(二):Select、Poll和Epoll_却道天凉_好个秋的博客-优快云博客源码分析Pollerclass Poller : noncopyable{ public: typedef std::vector<Channel*> ChannelList; Poller(Ev原创 2022-04-04 15:49:14 · 1984 阅读 · 0 评论 -
muduo网络库——ThreadPool
模型ThreadPool::Task ThreadPool::take(){ MutexLockGuard lock(mutex_); // always use a while-loop, due to spurious wakeup while (queue_.empty() && running_) { notEmpty_.wait(); } Task task; if (!queu原创 2022-03-31 22:18:36 · 570 阅读 · 0 评论 -
muduo网络库——关于boost::function和boost::bind的使用
1. 基础用法boost::function就像C#里面的delegate,可以指向任何函数,包括成员函数。当用bind把某个成员函数绑定到某个对象上时,我们就得到了一个闭包(closure)。class Foo{public: void methodA(); void methodInt(int a); void methodString(const string& str);};class Bar{public: void methodB(原创 2021-07-13 22:42:49 · 329 阅读 · 1 评论 -
muduo网络库——MutexLock、MutexLockGuard和Condition的封装
1. MutexLock封装了linux底层的pthread_mutex_init、pthread_mutex_destroy、pthread_mutex_lock和pthread_mutex_unlock等函数。class CAPABILITY("mutex") MutexLock : noncopyable{ public: MutexLock() : holder_(0) { MCHECK(pthread_mutex_init(&mutex_, NULL)原创 2021-06-27 23:23:06 · 392 阅读 · 0 评论 -
muduo网络库——条件变量(condition variable)
互斥器:加锁原语,用来排他性地访问共享数据;条件变量:等待某一条件的成立;1. 概念一个或多个线程等待某个布尔表达式为真,即等待别的线程“唤醒”它。条件变量的学名叫管程(monitor)。Java Object内置的wait()、notify()、notifyAll()是条件变量。2. 使用对于wait端:1)必须与mutex一起使用,该布尔表达式的读写需受此mutex保护;2)在mutex已上锁的时候才能调用wait();3)把判断布尔条件和wait()放到while循环中原创 2021-06-25 21:38:58 · 330 阅读 · 0 评论 -
muduo网络库——noncopyable类
先上源码:#ifndef MUDUO_BASE_NONCOPYABLE_H#define MUDUO_BASE_NONCOPYABLE_Hnamespace muduo{class noncopyable{ public: noncopyable(const noncopyable&) = delete; void operator=(const noncopyable&) = delete; protected: noncopyable() = def原创 2021-02-04 00:26:51 · 323 阅读 · 0 评论 -
muduo网络库——enable_shared_from_this和弱回调
1. 问题引入来看这么一段代码class StockFactory : boost::nocopyable{public: std::shared_ptr<Stock> get(const std::string& key); private: void deleteStock(Stock* stock) { if (stock) { MutexLockGuard lock(_mutex); stocks_.erase(stock->ke原创 2020-12-30 23:16:37 · 662 阅读 · 1 评论