E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Muduo源码
Muduo源码
剖析--整体架构
Muduo整体架构1.编译和安装git:GitHub-chenshuo/muduo:Event-drivennetworklibraryformulti-threadedLinuxserverinC++11gitclonehttps://github.com/chenshuo/muduo.git安装依赖库:sudoaptinstallg++cmakemakelibboost-dev可安装三个非必须
birate_小小人生
·
2023-04-13 02:57
muduo剖析
架构
linux
tcp
muduo源码
剖析——ThreadPool线程池的实现
1线程池原理
muduo源码
中线程池的实现是基于生产者/消费者模式的,可参考基于生产者/消费者模式原理实现无界缓冲区和有界缓冲区。其中缓冲区(即下图中的任务队列)为“环形缓冲区”。
高自强的博客
·
2023-04-12 00:42
muduo
线程池
muduo源码
剖析——以三个切片浅析muduo库代码设计的严谨性、高效性与灵活性
0前言陈硕大佬的muduo网络库的源码我已经看了好久了,奈何本人实力有限,每每看到其代码设计的精巧之处只能内心称赞,无法用言语表达出来。实在令人汗颜。最近在看到网络设计部分时有了一些体会,结合自己之前在网络编程方面的积累,特对代码设计中的一些精巧之处做一些总结。就muduo在多线程并发服务器设计而言,除了其高效的并发服务架构之外,其在代码设计方面的高效性和灵活性可以从下面三个切片得以体现。在这之前
高自强的博客
·
2023-04-12 00:42
muduo
多线程
Muduo源码
剖析
1、总体流程1.acceptor进行listen阶段后,往channel中注册可读事件。2.acceptor可读处理中生成TcpConnection指针,通过EventloopThreadPool轮询出其中一个线程的eventloop,并将此TcpConnection的可读、可写等事件注册到自己Channel(eventLoop)中。3.每个EventLoop监听到具体channel的事件后,分析
YanWenCheng_
·
2023-04-12 00:08
muduo
c++
muduo源码
分析之回调模块
这次我们主要来说说muduo库中大量使用的回调机制。muduo主要使用的是利用Callback的方式来实现回调,首先我们在自己的EchoServer构造函数中有这样几行代码EchoServer(EventLoop*loop,constInetAddress&addr,conststd::string&name):server_(loop,addr,name),loop_(loop){//注册回调函
shicoder
·
2023-04-08 10:14
Muduo源码
刨析-完成服务器功能的TcpServer类
目录TcpServer类功能数据成员暴露的接口TcpServer类功能 TcpServer是muduo库中创建Tcp服务器的类,可以通过对:TcpServer的msgcallback进行设置,可以完成我们想要的服务器功能,例如实现一个echo服务器,实现一个web服务器.数据成员EventLoop*m_loop;///MainCreator(也就是acceptor)运行的loop,若threadN
c++终结者
·
2023-04-02 03:16
服务器
网络
muduo---C++网络编程库
陈硕muduo参考资料
muduo源码
剖析Muduo是一个基于Reactor模式的现代C++网络库,它采用非阻塞IO模型,基于时间驱动和回调,原生支持多核多线程,适合编写Linux服务端多线程网络应用程序
Mr.liang呀
·
2023-03-31 20:18
TCP/IP网络编程
Linux高性能服务器
C++基础
c++
网络
架构
muduo源码
学习(四) 实现TCP网络库(中)
runInLoop相关在之前得文章中提到了EventLoop::runInLoop(),该函数用于在EventLoop的IO线程执行某个用户的任务回调,源码如下:voidEventLoop::runInLoop(constFunctor&cb){if(isInLoopThread()){//判断是否在当前IO线程cb();//同步调用}else{queueInLoop(cb);//加入队列}}若用
荏苒何从cc
·
2023-03-28 12:58
muduo中的reactor
此文作为自己阅读
muduo源码
的笔记,目的在于用直白的语言记录阅读时的理解。muduo网络库,分为两个部分。base模块主要为实现网络库的一些基础工具,如互斥锁、条件变量、日志库、线程池等等。
犭虫彳亍口苗
·
2023-03-27 17:18
muduo源码
分析之TcpServer模块详细介绍
这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1]然后我们来看下muduo的整体架构[来源1]首先muduo有一个主反应堆mainReactor以及几个子反应堆subReactor,其中子反应堆的个数由用户使用setThreadNum函数设置,mainReactor中主要有一个Acceptor,当用户建立新的连接
·
2022-04-25 16:49
muduo源码
分析之TcpServer模块
这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1]然后我们来看下muduo的整体架构[来源1]首先muduo有一个主反应堆mainReactor以及几个子反应堆subReactor,其中子反应堆的个数由用户使用setThreadNum函数设置,mainReactor中主要有一个Acceptor,当用户建立新的连接
·
2022-04-24 21:24
golang
muduo源码
分析之回调模块
这次我们主要来说说muduo库中大量使用的回调机制。muduo主要使用的是利用Callback的方式来实现回调,首先我们在自己的EchoServer构造函数中有这样几行代码EchoServer(EventLoop*loop,constInetAddress&addr,conststd::string&name):server_(loop,addr,name),loop_(loop){//注册回调函
·
2022-04-24 21:54
golang
muduo源码
分析之Buffer
这一次我们来分析下muduo中Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们想象一下最简单的EchoServer服务器,客户端建立一个连接,以后服务器和客户端之间的通信都是通过这个connfd发送和接受数据,于是每一个connfd都应该有一个自己buffer,当我们发送数据太快,服务器发送的太慢,则
·
2022-04-22 15:46
golang
muduo源码
分析之muduo简单运用
今天不先实现muduo项目,我们先来看下muduo库的基本使用,只有了解了如何用,才能在写代码的时候知道自己写的找个函数是干嘛的,实际上是怎么使用的这个函数。首先说简单点,就是定义一个Server,设置两个回调函数//回调连接相关的事件voidonConnection(constTcpConnectionPtr&conn);//回调读写事件voidonMessage(constTcpConnect
·
2022-04-22 15:13
golang
muduo_base时间戳相关模块
使用的
muduo源码
为2.0.2版本。muduo_base时间戳相关代码先从muduo_base下的UTC时间戳文件开始学习。
·
2022-01-12 16:20
后端c++
muduo源码
学习(二) 实现TCP网络库(上)
由于
muduo源码
的封装比较复杂,本人在其基础上进行了简化,保留其中核心的代码供于学习,因此示例代码非
muduo源码
。
荏苒何从cc
·
2021-05-18 16:21
muduo源码
分析:Thread类
代码文件目录为:muduo/baseThreadNameInitializerThreadNameInitializer进行主线程初始化操作(利用全局变量):包括设置默认的线程name、缓存线程id。如果进行了fork,那么在子进程中运行afterFork函数进行同样的初始化工作。voidafterFork(){muduo::CurrentThread::t_cachedTid=0;muduo::
amoscykl
·
2020-09-16 20:06
moduo网络库
muduo源码分析
muduo源码
解析11-logger类
logger:classlogger{};在说这个logger类之前,先看1个关键的内部类Implprivate://logger内部数据实现类Impl,内部含有以下成员变量//时间戳,logstream数据流,日志级别,源文件行号,源文件名字.classImpl{public:typedeflogger::loglevelLogLevel;//构造函数,最重要的地方,负责把日志头信息写入到m_s
WoodInEast
·
2020-08-24 19:00
muduo源码
分析之多线程TcpServer
(一)EventLoopThread类在
muduo源码
分析之EventLoop::runInLoop()函数因为要测试跨线程runInLoop()调用,因此,引入了EventLoopThread类,这里回顾以下
NearXDU
·
2020-08-16 17:32
muduo和多线程学习
C++多线程
muduo源码
分析之定时器TimerQueue的设计与实现
1.简介这部分介绍TimerId、Timer、TimerQueue三个class的封装,反映到实际使用,主要是EventLoop中的三个函数:runAt()、runAfter()、runEvery()。TimerQueue的封装是为了让未到期的时间Timer有序的排列起来,这样,能够更具当前时间找到已经到期的Timer也能高效的添加和删除Timer。所谓的到期与未到期,与当前在当前时间之前表示已经
NearXDU
·
2020-08-16 17:32
muduo和多线程学习
C++多线程
muduo源码
中的时间类
MutexLock私有成员:Phread_mutex_tmutex_;//互斥变量pid_tholder;//用来表示给互斥量上锁线程的tidMutexLock()~MutexLock()isLockByThisThread()->bool用来检查给互斥量上锁的是否为当前线程assertLocked()lock()//加锁,调用assignHolder设置加锁线程IDunlock()//解锁,调用
ythunder
·
2020-08-16 17:54
c++
现代C++的回调技术--使用std::bind和std::function
最近在读完陈硕大牛的《Linux多线程服务端编程》以及
muduo源码
后,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术。
uulogging
·
2020-08-16 16:35
C++
muduo
muduo源码
笔记-base-Timestamp
1.Timestamp.h文件Timestamp表示的是UTC时间,最小可表示微秒(us)。数据成员microSecondsSinceEpoch_使用int64_t(longlong)表示对象,因此作者建议将此值按值传递,这样可以直接存放在寄存器中,提高访问速度。#ifndefMUDUO_BASE_TIMESTAMP_H#defineMUDUO_BASE_TIMESTAMP_H#include"m
w小鸣
·
2020-08-16 14:17
muduo源码笔记
读
Muduo源码
笔记---8(定时器)
muduo的定时器由三个类实现,TimerId、Timer、TimerQueue。1、采用timer_create函数得到定时器对象timerfd_create把时间变成了一个文件描述符,该“文件”在定时器超时的那一刻变得可读,这样就能很方便的融入到select/poll框架中,用统一的方式来处理I/O和超时事件,这正是Reactor模式的长处。2、Timer类Timer是对定时器的高层次抽象,封
AtwOne
·
2020-08-16 14:08
muduo源码读书笔记
muduo源码
学习(二):定时器
TimerQueue定时器在Reactor的基础之上,muduo又添加了定时器的功能。有了定时器,我们就可以将内部定时器事件或者编程者在程序中给定的一定时刻需要执行的任务,就是EVENTLOOP中的runAtrunAfterrunEvery等与外部的IO事件一起处理。muduo的定时器功能主要由三个class实现:TimeridTimerTimerQueue,编程用户只能看见TimerId,其他两
Ideal Dragon
·
2020-08-16 14:18
muduo
muduo编译方法v2.0
1安装cmake2安装boost3下载
muduo源码
(0.8版本)然后问题就开始了按照书上说的方法没有正确完成编译经过两天的摸索发现了其他的方法在base和net文件夹下有cmake的配置文件1cmakebase2make2.5
ljq550000
·
2020-08-16 13:19
Linux多线程服务端编程学习(一)Centos7安装muduo网络库
1、github下载
muduo源码
,https://github.com/chenshuo/muduo我是以root权限登陆的(root权限登陆需要小心操作,不是很熟悉的,还是普通用户登陆,接下来的操作前面加
YoungSusie
·
2020-08-16 11:19
Muduo
从零开始学写HTTP服务器(六)使用muduo网络库
muduo源码
中内嵌了一个简单的HTTPserver程序,源码见muduo/net/http。看了源码之后受益匪浅。
NearXDU
·
2020-08-14 22:38
Http协议
muduo源码
分析之TcpConnection发送数据
(一)writeable事件的busyloop发送数据是要比接收数据更加麻烦的事情,因为它是一个主动发生的事情,考虑下面情况:水平触发模式(Level-Triggered);当socket可写时,会不停的触发socket可写的事件,如何处理?也就是说,如果发送缓冲不满,将不停触发socket可写事件,也就是说,poll/epoll调用不停返回,也就进入busyloop了。怎么解决这个问题,以前有一
NearXDU
·
2020-08-14 22:05
muduo和多线程学习
C++多线程
muduo源码
分析之EventLoop::runInLoop()函数
前面所学的一些内容,从最早的什么都不做的EventLoop开始,到后面的定时器,功能不断在丰富,不过一直都是单线程下的。也就是说EventLoop对象在主线程中进行事件循环。今天花了一天时间所学习的EventLoop::runInLoop()就打开muduo多线程编程的大门。1.eventfd唤醒线程先来看看这个eventfd的用法,直接上示例:#include#include#include#i
NearXDU
·
2020-08-14 22:05
muduo和多线程学习
C++多线程
muduo源码
分析之EventLoop、Channel、Poller的实现
作者一直强调的一个概念叫做oneloopperthread,撇开多线程不谈,本篇博文将学习,怎么将传统的I/O复用poll/epoll封装到C++类中。1.I/O复用复习使用poll/epoll进行I/O复用的一些编程内容。使用poll对于一个文件描述符fd来说,我们将通过structpollfd来设置我们关注的事件event,并在通过poll调用返回获取活跃的事件revent。比如说(伪代码):
NearXDU
·
2020-08-14 22:04
muduo和多线程学习
C++多线程
muduo源码
分析--我对muduo的理解
分为几个模块EventLoop、TcpServer、Acceptor、TcpConnection、Channel等对于EventLoop来说:他只关注里面的主驱动力,EventLoop中只关注poll,这类系统调用使得其成为Reactor模式,EventLoop中有属于这个loop的所有Channel,这个loop属于哪一个Server.几个类存在的意义:从应用层使用的角度来看,用户需要初始化一个
鱼思故渊
·
2020-08-14 22:35
muduo源码分析
muduo源码
分析--buffer中的线程安全
在栈上准备了一个65536字节的extrabuf(这个空间是在readFd函数内部定义的,说以说是内部栈空间,在这个函数返回以后这个栈空间就会消失,属于临时变量),然后利用readv(0来读取数据,iovec有两块,第一块指向MuuodBuffer中的writable字节,另一快指向栈上extrabuf。这样如果读入的数据不多,那么全部都读到Buffer中去了;如果长度超过Buffer的writa
鱼思故渊
·
2020-08-14 22:35
muduo源码分析
muduo源码分析
c++
线程
网络编程
muduo源码
分析---EventLoopThread
这个类只有两个对外接口的函数,一个构造函数,一个开始Loop的函数类的内部成员:一个Loop指针loop_(说明内部并没有实例化EventLoop)一个线程thread_一个锁Mutex一个条件变量cond_一个初始化回调callback_EventLoopThread初始化传递的是函数回调,同时开启一个线程,线程函数运行的就是实例化一个EventLoop,并让这个EventLoop进入到loop
鱼思故渊
·
2020-08-14 22:34
muduo源码分析
muduo源码分析
muduo源码
分析---EventLoop类
现在暂时记住TcpConnection是TcpServer中Acceptor关注的监听套接字上accept新连接后被初始化的一个对象,接下来分析下EventLoop这个东西才是真正驱动库的核心,是别的类(EpollPollerAcceptor)帮助他完成了库的功能,看看内部是怎么实现的。EventLoop:这个类中最重要的成员就是poller_,这个成员调用epoll_wait监听这个EventL
鱼思故渊
·
2020-08-14 22:34
muduo源码分析
muduo源码分析
muduo源码
分析--数据在muduo中的旅程
在实例化一个EvenLoop之后,就会有两个socketfd(这两个套接字分别归属于两个Channel中,一个是异步唤醒的wakeFd,一个timequeue初始化的fd)被添加到监听队列中数据发送的流程:数据的发送主要靠异步唤醒,当主IO线程接受到一个新的连接后,在TcpServer中实例化一个TcpConnection,然后这个新的连接被挂载到某个线程池(EventLoopThreapPool
鱼思故渊
·
2020-08-14 22:34
muduo源码分析
muduo源码分析
muduo源码
分析--事件如何被关注的 EpollPoller Channel TcpServer
首先看TcpServer:在这里肯定是有socketfd的,不然这个监听套接字是怎么被关注的呢!这样的操作时通过Accept来处理的Acceptor:在这个类就是提供给TcpServer让其监听的,类中有Channel,也有一个Socket,有一个事件handleRead(),这个函数肯定是提供给Channel的,等到Acceptor中的socketfd有事件时,肯定是可读事件,调用Channel
鱼思故渊
·
2020-08-14 22:34
muduo源码分析
muduo源码分析
muduo源码
学习之Thread, EventLoopThread和 EventLoopThreadPool
文章目录功能ThreadclassThread.hThread.ccEventLoopThreadEventLoopThread.hEventLoopThread.ccEventLoopThreadPoolEventLoopThreadPool.hEventLoopThreadPool.cc本来没想看这一块,但是看TCPServerclass的时候里面用到了,所以先总结一下这两个类的封装功能这三个
吕白_
·
2020-08-14 21:31
muduo
源码学习
muduo
源码学习总结
muduo源码
学习之EventLoop::runInLoop函数和eventfd
文章目录EventLoop::runInLoop函数功能eventfd的使用创建eventfd示例代码EventLoop::runInLoop源码分析如何使用该功能EventLoop::runInLoop函数功能在上一篇博客介绍了muduo的核心主循环EventLoop::loop函数,在muduo中,还有一个十分好用的功能:可以执行其他线程的任务,因为平时IO线程都阻塞在EventLoop::l
吕白_
·
2020-08-14 21:31
muduo
源码学习
muduo
源码学习总结
Reactor模式解析——muduo网络库
最近一段时间阅读了
muduo源码
,读完的感受有一个感受就是有点乱。当然不是说代码乱,是我可能还没有完全消化和理解。为了更好的学习这个库,还是要来写一些东西促进一下。
weixin_34389926
·
2020-08-14 21:22
muduo网络库脉络分析(1)
blog.csdn.net/shreck66/article/details/50945929去年看muduo网络库时没有总结博文,导致前段时间用muduo时发现好多东西都模模糊糊,于是就花时间又一次翻阅了
muduo
Barry__
·
2020-08-14 19:43
Linux服务器编程
muduo
muduo源码
分析 EventLoopThreadPool 类
文章目录构造与析构start开启线程池getNextLoop采用轮询的方式分配EventLoopgetLoopForHash采用hash方式分配EventLoopgetAllLoops返回所有的EventLoopEventLoopThreadPool是一个线程池,只不过该线程池有一点特殊,该线程池中的每一个线程都要执行EventLoop进行文件描述符的监听。此时一个线程用于管理分配线程池中的Eve
冯巩2.0
·
2020-08-14 19:26
muduo源码分析
muduo源码
分析 Channel类
文章目录头文件构造与析构update与removehandleEvent事件分发Channel是单个文件描述符进行事件分发的类https://blog.csdn.net/qq_43390943/article/details/89873302中介绍了Channel在新连接到达时的作用。这里在源码中看一些Channel处理了哪些东西。头文件//事件分发器,每个事件分发器对应一个文件描述符,监听该文件
冯巩2.0
·
2020-08-14 19:26
muduo源码分析
muduo网络库源码剖析系列
1.
muduo源码
剖析专栏注:此系列来自于专栏:https://blog.csdn.net/FreeeLinux/column/info/13805muduo库的Socket封装muduo库的Acceptor
Baymax_yan
·
2020-08-14 19:06
muduo
muduo源码
阅读(三):TcpServer
TcpServer功能:这是一个接口类,拥有一个管理监听套接字的类accptor,拥有一张具有多个管理连接套接字的TcpConnection类的映射表。它只是对这两个类进行管理,会设置它们的一些回调函数,监听端口,等,负责acceptor和TcpConnection两个类与用户交互的接口,而具体的调用实现还是由那两个具体的类去实现。比如连接到来时的调用函数,用户设置为onConnection,则接
Ideal Dragon
·
2020-08-14 18:08
muduo
muduo源码
剖析-接受数据和发送数据
1接受数据客户端与服务器建立连接,就有了一个TcpConnection对象,该TcpConnection对象包含客户端套接字文件描述符,对应的channel,以及所属的EventLoop对象。上述三个TcpConnection对象非常重要的数据成员,他们标识了这个TcpConnection对象的身份。TcpConnection对象还拥有inputBuffer_和outputBuffer_两个重要数
qingchengf
·
2020-08-14 18:34
muduo源码
分析:日志相关类(1)
1.stringPiece类:当字符串来用统一char*字符串和std::string。通过char*字符串或者string作参数传递字符串,形参为stringPiece类型,就不会有内存拷贝stringPiece只有两个变量constchar*ptr_;//字符串首地址intlength_;//字符串长度其实形参为constchar*也可以做到不拷贝内存,只是sting类型的实参传递时,要用st
le119126
·
2020-08-14 17:11
muduo
c++
linux
muduo源码
学习笔记(2)
前言:对于muduo库,我觉得,光Linux多线程上提到的一些实现,还是不够的,在base/里面,还有/net里面提供了很多不错的实现,值得去学习,暑假算是看看muduo的百分之八十的源码,并对其进行了一次实现,(剩下的在最近总结的时候,也会开始看看,并实现一遍),对于muduo库,简单谈谈自己对其实现的理解。日志缓存流LogStream在muduo实现的基础日志类,一共用来三个文件,LogFil
梦花火
·
2020-08-14 17:24
C++
Muduo
【
Muduo源码
分析】
Muduo源码
分析系列总览
本系列主要是分析Muduo网络库的执行流程,让大家有一个大致的认识。网络库主要是完成对三个半事件的关注。本系列的具体信息如下:连接的建立处理:https://mp.csdn.net/postedit/99467217连接的断开处理:https://blog.csdn.net/hello_ape/article/details/99482349数据的接收:https://blog.csdn.net/
hello_ape
·
2020-08-14 17:53
Muduo
【
Muduo源码
分析】muduo的EventLoop 解读
Muduo奉行的是每个oneloopperthread,意思是每个线程只有一个EventLoop对象。在Muduo中,称创建了EventLoop对象的线程是IO线程。我主要关注大体框架,有些细节暂时不关注。首先看看构造函数(下列源码源自Muduo的教程示例)EventLoop::EventLoop():looping_(false),quit_(false),callingPendingFunct
hello_ape
·
2020-08-14 17:53
Muduo
Muduo
Linux网络编程
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他