moduo源码阅读笔记
对muduo多线程开源库进行学习及分享使用
麻子来了
这个作者很懒,什么都没留下…
展开
-
muduo库学习笔记十六:base库之日志库三 LogFile类
LogFile类:1、在介绍Logger类时,我们提到Logger类可以自定义Output xx函数和Flush xx函数,由用户来选择日志信息的输出位置以及flush方式,例如在muduo库学习笔记十三:base库之日志库一 Logger类示例程序中,我们就使用fwrite和fflush作为日志信息输出方法。而LogFile类就相当于定义了Muduo库自己的输出到日志文件的Output和Fl...原创 2020-02-08 14:13:32 · 510 阅读 · 0 评论 -
muduo库学习笔记十五:base库之日志库二 LogStream类
LogStream类:muduo没有用到标准库的iostream,而是自己写的LogStream类,这主要是出于性能。LogStream类,让它如同C++的标准输出流对象cout,能用<<符号接收输入,cout是输出到终端,而LogStream类是把输出保存自己内部的缓冲区,可以让外部程序把缓冲区的内容重定向输出到不同的目标,如文件、终端、socket。LogStream类图:...原创 2020-02-07 21:23:07 · 528 阅读 · 0 评论 -
muduo库学习笔记十四:base库之日志库一 Logger类
muduo日志库概述:C++ 采用stream风格,这样用起来更自然,不必费心保持格式字符串和参数类型的一致性,可以随用随写,而且是类型安全的。stream风格的另一个好处是当输出的日志级别高于语句的日志级别时,打印日志是个空操作,运行是开销接近零,而printf风格不易做到。muduo日志库整个底层主要由Logger类、LogStream类两个类实现。日志记录执行流程为:Lo...原创 2020-02-06 19:28:00 · 649 阅读 · 1 评论 -
muduo库学习笔记十三:base库之ThreadLocalSingleton
线程本地存储单例类:针对“每个结构”每个线程仅有一个线程本地存储类对象t_value_:类型为T的指针是pod类型可以用__thread修饰,每个线程一份deleter:Deleter类对象instance():返回T引用pointer():返回T指针destructor():借助Deleter才能被调用Deleter类:嵌套在ThreadLocalSinglet...原创 2020-02-06 09:32:03 · 492 阅读 · 0 评论 -
muduo库学习笔记十二:base库之threadLocal
ThreadLocal类:线程本地存储类为什么需要这个类?我们经常要用到"全局变量"以实现多个函数间共享数据。在单线程程序中,这样做是没有问题的,但是在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时,有些数据仅仅在某个线程需要,因此有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。在muduo库学习笔记五:base库之Thread类中我...原创 2020-02-05 16:00:04 · 407 阅读 · 0 评论 -
muduo库学习笔记十一:base库之Singleton
模板单例类:线程安全的单例模式实现// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (chenshuo at chenshuo dot com)#ifndef MUDUO_BASE_S...原创 2020-02-05 12:03:40 · 425 阅读 · 0 评论 -
muduo库学习笔记十:base库之ThreadPool
ThreadPool类:线程池类,muduo中线程池类线程个数是固定的。类图:其中:mutex_:互斥量cond_:条件变量与互斥量配合使用,当条件满足时,唤醒线程执行任务name_:线程池名称threads_:线程队列,内部存储的线程指针queue_:任务对列,内部元素类型为typedefboost::function<void()>Task;是...原创 2020-02-05 11:01:10 · 337 阅读 · 0 评论 -
muduo库学习笔记九:base库之BlockingQueue
BlockingQueue类:使用条件变量实现的无界队列类图:其中:mutex_:互斥量notEmpty_:条件变量queue_:队列put:生产产品take:消费产品size:队列大小以生产者消费者模型来说明该类的使用:(这里假设队列是有界的,所有生产前需要判断队列是否已满)测试程序:#include <muduo/base/Block...原创 2020-02-04 22:12:31 · 252 阅读 · 0 评论 -
muduo库学习笔记八:base库之Condition
Condition类:是muduo库中对系统线程条件变量类函数进行的封装;往往跟mutexlock配合使用,但也不控制其对象的生存期。类图:条件变量使用规范为: wait函数主要工作为:整个condition类主要为方便用户使用,封装pthread_cond_signal为notify(),封装pthread...原创 2020-02-04 17:25:18 · 272 阅读 · 0 评论 -
muduo库学习笔记七:base库之Mutex
Mutex互斥量:muduo库中的封装为MutexLock类与MutexLockGuard类。类图:继承boost::noncopyable,对象语义不能拷贝,该类主要是对一系列系统线程函数pthread_mutex_XXX的封装。私有数据成员:mutex_:存储linux线程互斥量pthread_mutex_tholder_:存储拥有该锁的线程的tid公有成员函数:...原创 2020-02-04 13:46:45 · 361 阅读 · 0 评论 -
muduo库学习笔记六:base库之Thread类pthread_atfork
pthread类知识点:1、boost::is_same判断两种类型是否是同一类型 2、pthread_atfork函数原型:intpthread_atfork(void(*prepare)(void),void(*parent)(void),void(*child)(void));对应头文件:#include<pthread.h>用法:调用fork时,内...原创 2020-02-03 18:06:12 · 383 阅读 · 0 评论 -
muduo库学习笔记五:base库之Thread类
Thread类:muduo库中的线程封装类。类图:私有成员变量:started:表示线程是否启动pthreadId:Linux下的POSIX线程也有一个id,类型pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。tid:该线程的真实id,可以唯一标识一个线程func:该线程要回...原创 2020-01-05 20:44:13 · 568 阅读 · 0 评论 -
muduo库学习笔记四:base库之Exception类
Exception类:继承自标准模板库exception,主要功能为记录异常发生时的堆栈信息。类图:私有成员变量:message_: 存储异常信息字符串 stack_ :存储异常发生时栈信息私有成员函数:fillstacktrace:用于记录异常发生时栈回收的信息,在构造函数中被调用公有成员函数:what: 返回message stackTrace:返回stack...原创 2019-12-22 15:25:08 · 324 阅读 · 0 评论 -
muduo库学习笔记三:cmake使用解析
cmake是项目管理工具:简化编译构建过程和编译过程。Cmake的工具链非常简单:cmake+make。在Linux平台下使用CMake生成Makefile并编译的流程如下:A、编写CMake配置文件CMakeLists.txtB、执行命令cmakePATH生成Makefile,PATH是CMakeLists.txt所在的目录。C、使用make命令进行编译。其中,A既是下文注释的文件,...原创 2019-12-15 22:01:26 · 1405 阅读 · 0 评论 -
muduo库学习笔记二:base库之timestamp
一、类功能:时间戳类,主要提供基础的时间值获取、计算功能类图:常量kMicroSecondsPerSecond表示每秒所对应的微秒数成员变量microSecondsSinceEpoch_表示到1970-01-01 00:00:00 UTC的微秒数成员函数swap()交换操作 toString()、toFormattedString()将时间转换为string类型或指定...原创 2019-12-08 13:17:23 · 434 阅读 · 0 评论 -
muduo库学习笔记一:编译安装
开发环境准备:使用Vm虚拟机,安装CentOS release 6.5 (Final)版本muduo库整个项目使用cmake编译,所以需要先安装cmake。使用yum安装,安装前确保配置了可用的yum源。安装完cmake,我们便可以来编译muduo库了。在muduo/路径下,直接执行./build.sh从报错信息来看,我们缺少gcc库,yum install gcc...原创 2019-11-17 20:07:27 · 867 阅读 · 0 评论 -
linux多线程网络库-muduo库学习
什么是muduo库Muduo 是基于 Reactor 模式、线程安全的、支持多核多线程的简单易用的网络库。符合现代C++编程规范、大量使用boost的开源网络库。为什么学习muduo库muduo库对学习linux下面向过程C++编程、多线程编程、boost库应用实践,有非常大的帮助。通过分析muduo的源代码,深入理解服务器端多线程网络开发实现。此外,muduo库提供了丰富的示例...原创 2019-11-10 14:14:44 · 1114 阅读 · 0 评论