muduo源码解析11-logger类】的更多相关文章

mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: 本文仅实现了最基本的mutexlock和mutexlockguard,放弃了muduo源码中的一大堆宏定义,为求精简可读性高. 成员变量mutexlock: private: pthread_mutex_t m_mutex; pid_t m_holder; m_mutex为要操作的mutex.主要有…
AspectJAwareAdvisorAutoProxyCreator 的类图 上图中一些 类/接口 的介绍: AspectJAwareAdvisorAutoProxyCreator : 公开了AspectJ的调用上下文,并弄清楚来自同一切面的多个Advisor在AspectJ中的优先级规则. AbstractAdvisorAutoProxyCreator : 通用自动代理创建器,它基于检测到的每个顾问程序为特定bean构建AOP代理. AbstractAutoProxyCreator : 扩展…
这是昨晚的武汉,晚上九点钟拍的,疫情又一次来袭,曾经熙熙攘攘的夜市也变得冷冷清清,但比前几周要好很多了.希望大家都能保护好自己,保护好身边的人,生活不可能像你想象的那么好,但也不会像你想象的那么糟. 好了,言归正传,搞技术的努力提升技术才是王道. 这是Mybatis 源码解析第三篇文章 ①.Mybatis 源码解析1--从JDBC到Mybatis ②.Mybatis 源码解析2--从0到1实例搭建 在上一篇文章<Mybatis从0到1实例搭建>中,可乐给大家手撸了一遍如何通过 Mybatis…
logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间戳,logstream数据流,日志级别,源文件行号,源文件名字. class Impl { public: typedef logger::loglevel LogLevel; //构造函数,最重要的地方,负责把日志头信息写入到m_stream中 //m_stream<<日志级别,old_errn…
FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件有一个StringPiece.h 个人感觉这个stringpiece没有必要实现啊,直接用std::string就好了内部实现的操作,基本上std::string都能完成.后面有关stringpiece我都直接放弃了 const char* data() const { return ptr_; }…
先看看 AspectJExpressionPointcutAdvisor 的类图 再了解一下切点(Pointcut)表达式,它指定触发advice的方法,可以精确到返回参数,参数类型,方法名 1 package concert; 2 3 public interface Performance { 4 void perform(); 5 } AspectJExpressionPointcutAdvisor 源码,官方文档解释说这是可以用于任何AspectJ切入点表达式的 Spring AOP A…
在学习Netty内存池之前,我们先了解一下Netty的内存对齐类SizeClasses,它为Netty内存池中的内存块提供大小对齐,索引计算等服务方法. 源码分析基于Netty 4.1.52 Netty内存池中每个内存块size都符合如下计算公式 size = 1 << log2Group + nDelta * (1 << log2Delta) log2Group:内存块分组 nDelta:增量乘数 log2Delta:增量大小的log2值 SizeClasses初始化后,将计算c…
在分析Spring 容器创建过程时,我们知道容器默认会加载一些后置处理器PostPRocessor,以AnnotationConfigApplicationContext为例,在构造函数中初始化reader时,加载默认后置处理器.其中 ConfigurationClassPostProcessor这个后置处理器专门处理带有@Configuration注解的类,ConfigurationClassPostProcessor后置处理实现了BeanDefinitionRegistryPostProce…
一.Object类概述   Object类是java中类层次的根,是所有类的基类.在编译时会自动导入.Object中的方法如下: 二.方法详解   Object的方法可以分成两类,一类是被关键字final修饰的的方法,这类方法能被子类覆盖.另一类是没有final修饰,它们可以被子类重写. 构造方法:Object()   在Object中没有显式的构造方法,这个只是创建一个Object对象,没有什么可以说的. getClass()   getClass被final修饰,不能被子类重写.它返回的是正…
{说明} 这一部分的源码内容被我简化了,另外我还额外添加了一个辅助类 is-grow. .columns // 修饰类 &.is-centered justify-content: center &.is-multiline flex-wrap: wrap &.is-vcentered align-items: center // 在平板+设备上采用 Flex 布局 +tablet display: flex .column display: block &.is-grow…
上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并未初始化 副本构造器:String(String s),简单的赋值,得到的是一个副本,俩个引用指向的是常量池中的同一个String,但是String是不可变的,所有用意不大 byte类构造器:String(byte[] b),将byte数组转换为String,注意并不是简单的赋值,而是整体copy一份 cha…
String是我们接触最多的类,无论是学习中还是工作中,基本每天都会和字符串打交道,从字符串本身的各种拼接.切片.变形,再到和其他基本数据类型的转换,几乎无时无刻都在使用它,今天就让我们揭开String神秘的面纱,这一小节主要讲解String的源代码是怎么构建的,下一节是String的一些疑点难点,通常在面试中会被问到. 在学习String之前,让我们先简单的看一下JVM的内存模型,附图一张,来自百度百科: 在java的每一个通过编译生成字节码文件后,运行期JVM将字节码文件(也就是class文…
timezone class timezone:public copyable { }: 作用: 感觉有点看不懂,detail内部实现文件类不明白跟时区有什么关系.timezone类主要是完成各个时区之间的转换,感觉自己用不到,一个时区就够了.内部成员变量就一个,是个Data结构体的共享智能指针提供了3个构造函数,TimeZone(const char* zonefile)构造函数,构造函数是explicit的,内置指针不能隐式的转换,只能使用初始化的形式TimeZone(int eastOfU…
exception class exception:public std::exception { }; 作用: 实现了一个异常类,继承于std::exception,主要用于实现打印线程调用栈信息. 成员变量: private: string m_message; string m_stack; 主要含有异常消息以及线程栈信息两个数据成员, 调用栈信息通过currentthread::stackTrace(false)获取. 成员函数: public: exception(string wha…
timestamp class timestamp:public mymuduo::copyable, public boost::equality_comparable<timestamp>, public boost::less_than_comparable<timestamp> { }: 作用: 主要是实现了时间戳的相关操作,例如时间戳的格式化,返回当前时间戳等等. 成员变量: private: int64_t m_microSeconds;//数据成员,表示时间戳的微秒数…
date class date:copyable { }: 作用: 此类作用主要是实现年月日和julianDay的互相转换内部最重要的一个数据成员m_julianDayNumber在mymuduo::detail中提供了相互转换的两个函数getJulianDayNumber和getYearMonthDay具体如何转换的内容没有深究.注意构造函数可以用julianday,年月日,struct tm三种类型去初始化,实际上都是年月日和julianDay之间的相互转换.toIosString 返回 格…
countdownlatch class countdownlatch:noncopyable { }; 作用: countdownlatch和mutex,condition一样,用于线程之间的同步,主要用于这样一种情况: 有一组线程,计算线程,IO线程1,IO线程2, 我们规定计算线程必须在所有的IO线程都结束后才能执行. 如果单纯使用mutex,计算线程可能比其他IO线程先抢到mutex,这不符合计算线程最后执行的要求. 但是可以使用条件变量来完成,当然条件变量不能单独使用,需要配套一个mu…
condition class condition:noncopyable { }; 作用: 实现了最简单condtion操作,包括init,destroy,wait,notify,notifyAll,waitforseconds操作,内部数据也很简单,mutexlock& m_mutex和pthread_cond_t m_cond使用方法和std::cond一样 成员变量: private: mutexlock& m_mutex; pthread_cond_t m_cond; 成员函数:…
AtomicIntegerT template<typename T> class atomicTntergerT:public noncopyable { }; 作用: 与std::aotmic<int> 类似,主要实现对 int32_t 和 int64_t 类型的原子操作. 在内部并不是使用互斥锁实现原子性,而是利用__sync_val_compare_and_swap和__sync_fetch_and_add在内部实现原子操作. 成员变量: private: volatile…
上一节我们主要讲了String类的一些不是很常用的方法,其中需要掌握的如下,我就不再赘述了 public int length() public boolean isEmpty() public byte[] getBytes() public byte[] getBytes(String charsetName) public char charAt(int index) public boolean equals(Object anObject) public boolean equalsI…
像keys或者smembers命令,需要遍历数据集合中的所有元素.在一个大的数据库中使用,可能会阻塞服务器较长的一段时间,造成性能问题,因此不适用与生产环境. 在Redis2.8.0中引入了scan类命令,可用于迭代整个数据库或者是哈希键.集合键和有序集合键这样的数据集合. scan类命令支持增量式迭代,它们每次执行都只会返回少量元素,所以这些命令可以用于生产环境. scan类命令使用游标迭代数据集合,命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时,使用这个新游标作为scan类…
Bulma 的 .container 类是这样实现的. .container position: relative // 不设置桌面以下设备的 container +desktop margin: 0 auto width: $desktop - 40px // 修饰类 // .container.is-fluid 不固定长度.左右两边保留 20px 的外边距,在桌面+设备上有效 &.is-fluid margin: 0 20px max-width: none width: auto +wid…
/* * 切片函数,非常重要,这里一定要牢记beginIndex是开始位置,endIndex是结束位置,区别于以前学的offset是开始位置,而count或length是个数和长度 * 比如说,new String("abcdefg",1,3)得到的是bcd * 而 "abcdefg".substring(1,3)得到的是bc,也就是下标为1和2的俩个字符,并不包括c */ public String substring(int beginIndex) { if (…
/* * 返回指定字符第一次出现的字符串内的索引 */ public int indexOf(int ch) { return indexOf(ch, 0); } /* * 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索 * 其中Character.MIN_SUPPLEMENTARY_CODE_POINT是指字符是小于两个字节的 */ public int indexOf(int ch, int fromIndex) { final int max = value.length;…
CurrentThread 作用: CurrentThread并不是一个类,而是一个命名空间,在mymuduo内部,目的是提供对于当前线程的管理操作. 内部变量: __thread int t_cachedTid; //当前线程ID __thread char t_tidString[];//当前线程ID ,char*类型 __thread int t_tidStringLength;//char*大小 __thread const char* t_threadName;//当前线程名字 __t…
目录 引言 源码解析 抽象函数entrySet() 两个集合视图 操作方法 两个子类 参考: 引言 今天学习一个Java集合的一个抽象类 AbstractMap ,AbstractMap 是Map接口的 实现类之一,也是HashMap.TreeMap.ConcurrentHashMap 等的父类,它提供了Map 接口中方法的基本实现(关于Map接口有疑惑的同学可参考 Java集合类根接口:Collection 和 Map) 源码解析 因为 AbstractMap 类是实现Map接口的抽象类,所以…
源码解析 基本调用类分析 任务启动由python脚本新建进程进行任务执行,后续执行由Java进行,以下将对java部分进行分 其中的调用原理机制. Engine 首先入口类为com.alibaba.datax.core.Engine的main方法,其中通过调用其本身的静态方法entry,该方法主要针对输入参入进行格式化以及校验: BasicParser parser = new BasicParser(); CommandLine cl = parser.parse(options, args)…
[源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 目录 [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 0x00 摘要 0x01 引论 1.1 调用 1.2 参数说明 0x02 Reducer 初始化 2.1 构造函数 2.2 初始化桶 2.3 初始化视图 2.3.1 BucketReplica成员变量 2.3.2 调用 2.4 初始化…
Java集合---Array类源码解析              ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类型:采用改进的归并排序. 1.对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序.对这一区别,sun在…
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Hashtable介绍第2部分 Hashtable数据结构第3部分 Hashtable源码解析(基于JDK1.6.0_45)第4部分 Hashtable遍历方式第5部分 Hashtable示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3310887.h…